PHP PDO Basic подготовленное заявление - PullRequest
0 голосов
/ 13 декабря 2010

Я пытаюсь сделать базовое подготовленное утверждение, используя pdo + mysql .. Кажется, я не могу получить значения, назначенные для моей жизни: /

 $dbh = new PDO('mysql:dbname=users;host=127.0.0.1', 'localAPI', 'localAPI');
 $a = 'asdf';
 $sth = $dbh->prepare("INSERT INTO users (userName, userPass, accountStatus) VALUES (':a', ':userPass', 'unconfirmed')");
 $sth->bindParam(':a', $a, PDO::PARAM_STR);
 $sth->execute();

Есть идеи?Заранее спасибо !!

Таблица результатов:

mysql> select * from users;
+--------+----------+-----------+---------------+-------------+---------+---------------------+----------+------------+---------+------+
| userId | userName | userPass  | accountStatus | accountType | balance | tCreated            | tUpdated | tLastLogin | promoId | ref  |
+--------+----------+-----------+---------------+-------------+---------+---------------------+----------+------------+---------+------+
|      1 | :a       | :userPass | unconfirmed   | user        |       0 | 2010-12-12 13:42:10 |     NULL |       NULL |    NULL | NULL | 
+--------+----------+-----------+---------------+-------------+---------+---------------------+----------+------------+---------+------+

Ответы [ 2 ]

2 голосов
/ 13 декабря 2010

Вы окружаете свои переменные в операторе SQL кавычками ... ':a' ...Удалите их, так как парсер подумает, что вы имели в виду здесь строку, а не переменную.Вы говорите базе данных, что имеете в виду строку с вызовом bind().

0 голосов
/ 13 декабря 2010

var_dump не должен показывать вам запрос с :test, замененным на 123, что, похоже, соответствует ожиданиям.Позвоните $sth->execute(); и все готово.

Причина в том, как работают подготовленные заявления.Смотрите, когда запрос выполняется, что происходит, когда запрос отправляется в виде строки в базу данных.Здесь он анализируется во внутренней форме, которая затем выполняется в интерпретаторе.С подготовленным оператором значения переменных (например, 123 для :test) передаются и анализируются отдельно от запроса.Это означает, что вы не можете «обмануть» парсер - именно на это опираются атаки типа внедрения - просто потому, что значения никогда не являются частью запроса и, следовательно, никогда не достигают парсера.

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