如何在PHP中使用准备好的语句从mysql更改为pdo?
如何在PDO中使用准备好的语句来执行此语句如何在PHP中使用准备好的语句从mysql更改为pdo?,php,pdo,Php,Pdo,如何在PDO中使用准备好的语句来执行此语句 $dml = "insert into bookmark(accountId,category,url,hash,title,created) value($_SESSION[accountId],$_POST[category],'$_POST[url]',md5('$_POST[url]'),'$_POST[title]',now())"; mysql_query($dml,$con); $dml=“插入书签(帐户ID、类别、url、哈希、标题
$dml = "insert into bookmark(accountId,category,url,hash,title,created) value($_SESSION[accountId],$_POST[category],'$_POST[url]',md5('$_POST[url]'),'$_POST[title]',now())";
mysql_query($dml,$con);
$dml=“插入书签(帐户ID、类别、url、哈希、标题、已创建)”
. “值(:accountId,:category,:url,MD5(:url),:title,NOW())”;
$statement=$pdo->prepare($dml);
$parameters=数组(
“:accountId”=>$\u会话[“accountId”],
“:category”=>$\u POST[“category”],
“:url”=>$\u POST[“url”],
“:title”=>$_POST[“title”]);
$statement->execute($parameters);
如果你想要“prepared statements”,你必须要求“prepared statements”……碰巧PDO能够像prepared statements一样预生成完整的语句。对,但我选择PDO主要是为了prepared statement人们使用PDO能够跨多个数据库类型使用它,因为PDO不依赖于MySQL。如果人们只想使用预先准备好的语句,而不关心与平台无关的东西,他们可以使用MySQLi。因此,如果您不声明您需要准备好的语句,我无法推断。mysqli也可以做准备好的语句,这是真的吗?PDO将根据需要处理转义和引用。@user198729:只有当底层驱动程序必须模拟准备好的语句时,才需要引用。一般来说,值是独立于语句发送的,因此在值的结束位置和语句的其余部分的开始位置之间没有任何混淆。您能否更具体地说明何时需要引用?@user198729:在使用参数时,从来都不需要引用。我应该说得更清楚一些,但我之前的评论只是指实现PDO接口的底层DB驱动程序。也就是说,只有SQL语句的一部分可以参数化:替换原子值的部分。名称(列、表、数据库)、子句、列表(例如中
的第二个参数)和c不能参数化。如果其中任何一项需要更改,则需要构造语句,这意味着您将负责清理任何用户输入。
$dml = $db->prepare("INSERT INTO bookmark (accountId, category, url, hash, title, created) VALUES (:account_id, :category, :url, MD5(:url), :title, NOW());");
$dml->bindParam(':account_id', $_SESSION['accountId']);
$dml->bindParam(':category', $_POST['category']);
$dml->bindParam(':url', $_POST['url']);
$dml->bindParam(':title', $_POST['title']);
$dml->execute();
$dml = "INSERT INTO bookmark (accountId, category, url, hash, title, created) "
. "VALUES (:accountId, :category, :url, MD5(:url), :title, NOW())";
$statement = $pdo->prepare($dml);
$parameters = array(
":accountId" => $_SESSION["accountId"],
":category" => $_POST["category"],
":url" => $_POST["url"],
":title" => $_POST["title"]);
$statement->execute($parameters);