Предупреждение: PDO :: exec (): SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1064 - PullRequest
0 голосов
/ 29 апреля 2018

После этого вопроса , я запускаю следующий скрипт:

$newrecord='{"firsttime":"19.53","secondtime":null,"sX464time":"6.25","wX1X465time":"4.14"}';//JSON
$sql='UPDATE  `'.$tablesnames[$i].'` SET `postrecords`='.$newrecord.' WHERE `id`='.$id;
//var_dump($sql) here
$update3=$pdo->exec($sql); 

var_dump($sql) получить результат:

string 'UPDATE  `table651` SET `postrecords`={"firsttime":"19.53","secondtime":null,"sX464time":"6.25","wX1X465time":"4.14"} WHERE `id`=1'  

Но, наконец, получите предупреждение:

Предупреждение: PDO :: exec (): SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1064 В синтаксисе SQL есть ошибка; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса, который можно использовать рядом с «firsttime»: «0», «secondtime»: null, «sX464time»: null

В чем проблема?

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Когда вы используете PDO или Object Orient MySQL, всегда связывайте параметры .

Строки всегда должны быть заключены в кавычки, а числа могут быть без кавычек. И не пытайтесь создать json, вместо этого создайте массив, а затем преобразуйте его в json.

$post_records = json_encode(array(
    'firsttime'=> '19.53',
    'secondtime' => null,
    'sX464time' => '6.25',
    'wX1X465time' => '4.14'
));

$sql='UPDATE `'.$tablesnames[$i].'` SET `postrecords`="'.$newrecord.'" WHERE `id`='.$id;
0 голосов
/ 29 апреля 2018

Синтаксическая ошибка в том, что у вас нет кавычек вокруг строки JSON в SQL.

Используйте bindParam() для решения проблемы пропущенных кавычек, а также убедитесь, что все экранировано правильно для предотвращения SQL-инъекций.

$stmt = $pdo->prepare('UPDATE  `'.$tablesnames[$i].'` SET `postrecords` = :record WHERE `id`= :id');
$stmt->bindParam(':record', $newrecord);
$stmt->bindParam(':id', $id);
$stmt->execute();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...