php pdo bind параметр не работает - PullRequest
2 голосов
/ 05 марта 2012

Я использую следующий код php pdo для вставки данных в базу данных mysql, вставка прошла успешно, однако обновленная база данных показывает строковые литералы ': a', ': b' в качестве значений в соответствующем поле.что не так?

$data = array(
  array('a' => 'John', 'b' => 'OK'),

);
    $st=$dbh->prepare("insert into mytable (a, b) values(':a', ':b')");
    $st->execute($data) or print_r($st->errorInfo());

Ответы [ 3 ]

2 голосов
/ 05 марта 2012

Удалить цитаты из ваших заполнителей.В противном случае они обрабатываются как строковые литералы и вставляются напрямую.

$st=$dbh->prepare("insert into mytable (a, b) values(:a, :b)");

И удаляют вложенность в вашем массиве:

// $data is an associative array, it should not contain another array!
$data = array('a' => 'John', 'b' => 'OK');

Чтобы быть последовательным, я предпочитаю использовать :для ключей массива заполнителей:

$data = array(':a' => 'John', ':b' => 'OK');    
1 голос
/ 05 марта 2012

Вы должны определить свой массив одинаково в sql и параметрах, вам не хватает ":".Вам также не нужны два массива, только один.

$data = array(':a' => 'John', ':b' => 'OK');

Запрос также не нуждается в кавычках, поскольку PDO уже знает, что это параметр

$st=$dbh->prepare("insert into mytable (a, b) values(:a, :b)");
$st->execute($data) or print_r($st->errorInfo());
0 голосов
/ 11 января 2018

Вы выполняете подготовленный оператор с именованными заполнителями. Таким образом, вам необходимо удалить кавычки из ваших заполнителей, в противном случае они обрабатываются как значения для соответствующих столбцов и обновляются напрямую.

Чтобы быть последовательным, я предпочитаю использовать ключи массива: on:

$data = array(':a' => 'John', ':b' => 'OK'); 

$st=$dbh->prepare("insert into mytable (a, b) values(:a, :b)");

Вы также можете выполнить подготовленный оператор с заполнителями вопросительного знака:

$data = array(
  array('John','OK'),

);
$st=$dbh->prepare("insert into mytable (a, b) values(?, ?)");
$st->execute($data) or print_r($st->errorInfo());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...