关联数组和绑定参数

时间:2009-04-12 17:58:39

标签: php pdo mysqli

我对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::preparecall_user_func_array的某处,但我对后一种功能如何运作感到困惑,并希望得到解释。

3 个答案:

答案 0 :(得分:5)

我很困惑,也许你也是。这是一个简单的例子:

$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'));

希望这有帮助!

答案 1 :(得分:0)

PDOStatement :: execute()使用参数标记,因此您必须在调用PDO :: prepare()之前构造查询。

答案 2 :(得分:0)

您不必使用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