PHP обновлять значение запроса всегда строкой NULL вместо NULL - PullRequest
1 голос
/ 03 мая 2020

Хорошо, я понятия не имею, что здесь происходит. У меня есть запрос на обновление, что два из трех полей работают точно так, как мне нужно, но независимо от того, сколько я предварительно отформатирую значение для него, оно все равно всегда отображается в кавычках 'NULL' в моем дамп-запросе, а не NULL как показано ниже.

Это то, как я предварительно форматирую значения моих полей;

$val1 = (is_null($item1Val)) ? 'NULL' : "'" . stripslashes(json_encode($item1Val)) . "'";     
$val2 = (is_null($item2Val)) ? 'NULL' : "'" . stripslashes(json_encode($item2Val)) . "'";
$val3 = (is_null($item3Val)) ? 'NULL' : "'" . trim($item3Val) . "'";

Это строка запроса на обновление, которую я использую в своем коде. Я также пытался использовать конкатенацию строк, и это, похоже, приводит к той же самой проблеме;

$dml = "UPDATE table SET
field_1 = $val1,
field_2 = $val2,
field_3 = $val3,
WHERE id = $id;";

ЭТО, однако, так выглядит, когда я выкидываю запрос;

UPDATE table SET
field_1 = NULL,
field_2 = NULL,
field_3 = 'NULL',
WHERE id = $id;

Я сбросил значения, которые поступают как необработанные данные, и каждое из них приходит как истинные значения NULL, что именно то, что я хочу. Итак, если они все входят как истинные значения NULL, то как последняя переменная превращается в значение кавычки, а не первые две, работающие точно так, как нужно? Я понятия не имею, чего мне здесь не хватает.

Это сводит меня с ума!

Ответы [ 2 ]

1 голос
/ 04 мая 2020

используйте подготовленные операторы, как вы всегда должны

dml = "UPDATE table SET field_1 = ?,field_2 = ?,field_3 = ?,WHERE id = ?;";
$stmt = $mysqli->prepare(dml );
$stmt->bind_param("ssss",$val1, $val2,$val3, $id);
$stmt->execute();
//fetching affected rows
$stmt->close();

$ stmt - это переменная, которая может быть назначена новой, если вы не хотите ее выполнять, или закрыта.

0 голосов
/ 03 мая 2020

Вы используете php, поэтому вы должны подготовить запрос и связать поля:
Например:

$sta = $this->db->prepare('INSERT INTO tableName SET field_1=:field1, field_2=:field2 WHERE id=:id);

$sta->execute([
  ':field1' => $field_1,
  ':field2' => $field_2,
  ':id' => $id
]);

Конечно, синтаксис зависит от того, какую среду вы используете

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...