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