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

Я хочу обновить несколько таблиц, как показано ниже:

for ($i=0; $i <count($tablesnames); $i++) {

    $update3=$pdo->prepare('UPDATE :surveytable SET `postrecords`=:newrecord WHERE `id`=:id');
//var_dump()here
    $update3->bindValue(':surveytable', $tablesnames[$i],PDO::PARAM_STR);

    $update3->bindValue(':newrecord',$newrecord,PDO::PARAM_STR);

    $update3->bindValue(':id',$id,PDO::PARAM_INT);

    $update3->execute();

}  

Проверьте результат var_dump, $tablesnames[$i] и $newrecord равны string, $id равно int, $update3 равно false.
Казалось, все в порядке, но не удалось,

Предупреждение: PDO :: prepare (): SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1064 В синтаксисе SQL есть ошибка; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с '? SET postrecords =? ГДЕ id =? '

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

1 Ответ

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

(К сожалению) вы не можете использовать параметры для вашего имени таблицы в вашем подготовленном утверждении. Вы можете использовать их только для литералов data . Так что UPDATE :surveytable недействительно.

Согласно инструкция :

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

Когда вы ( полностью !!! ) доверяете своему источнику $tablesnames, используйте

'UPDATE `' . $tablesnames[i]` . '` SET `postrecords`=:newrecord WHERE `id`=:id'

вместо

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