Ассоциативные массивы и параметры привязки - PullRequest
1 голос
/ 12 апреля 2009

Я немного запутался с функциями PDO::prepare.

У меня есть что-то вроде этого

array('user_email'=>'hello@net.com','user_pass'=>'password')

и я бы хотел перевести это как-то так

INSERT INTO user_info (user_email, user_pass) VALUES (hello@net.com, password)

использование параметризованных запросов с PDO (или mysqli, я открыт для предложений). Другая идея -

array('uid'=>'10', 'first_name'=>'robert', 'last_name'=>'jones')
array("email", "number")

в

SELECT email, number FROM t1 WHERE uid=10 AND first_name=robert AND last_name=jones

Я знаю, что ответ лежит где-то с PDO::prepare и call_user_func_array, но я действительно запутался в том, как работает последняя функция, и был бы признателен за объяснение.

Ответы [ 3 ]

5 голосов
/ 12 апреля 2009

Я в замешательстве, а может, и вы тоже. Вот простой пример:

$sth = $dbh->prepare('SELECT * FROM table WHERE id = ? AND date = ?');
$sth->execute(array(150, '2009-04-04'));
$data = $sth->fetchAll();

Или:

$sth = $dbh->prepare("INSERT table VALUES(:foo, :bar)");
$sth->bindParam(":foo", $foo);
$sth->bindParam(":bar", $bar);

Или:

$sth = $dbh->prepare("INSERT INTO user_info (user_email, user_pass) VALUES (:email, :pass)");
$sth->execute(array(':email' => 'foo@example.org', ':pass' => '1234'));

Надеюсь, это поможет!

0 голосов
/ 12 апреля 2009

Вам не нужно использовать call_user_func_array (). PDOStatement :: execute () по умолчанию принимает ассоциативные массивы.

$stmt = $pdo->prepare("SELECT fld FROM tbl WHERE fld=:parameter1 AND fld2=:parameter2");
$stmt->execute(array(":parameter1" => "value1", ":parameter2" => "value2"));
...

http://se.php.net/manual/en/pdo.prepare.php

0 голосов
/ 12 апреля 2009

PDOStatement :: execute () работает с маркерами параметров, поэтому вы должны создать запрос перед вызовом PDO :: prepare ().

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