如何正确使用 PDO 对象进行参数化 SELECT 查询

2022-08-30 08:08:06

我已经尝试过按照 PHP.net 说明进行查询,但我不确定执行此操作的最佳方法。SELECT

如果可能的话,我想使用参数化查询来返回字段与参数匹配的表中。这应该返回一个,因为它是唯一的。SELECTIDnameID

然后,我想将其用于另一个表中,因此我需要确定它是否成功。IDINSERT

我还读到,您可以准备查询以供重用,但我不确定这有什么帮助。


答案 1

您可以像这样选择数据:

$db = new PDO("...");
$statement = $db->prepare("select id from some_table where name = :name");
$statement->execute(array(':name' => "Jimbo"));
$row = $statement->fetch(); // Use fetchAll() if you want all results, or just iterate over the statement, since it implements Iterator

以相同的方式插入:

$statement = $db->prepare("insert into some_other_table (some_id) values (:some_id)");
$statement->execute(array(':some_id' => $row['id']));

我建议您将 PDO 配置为在出错时引发异常。然后,如果任何查询失败,您将获得一个 - 无需显式检查。要启用异常,请在创建对象后立即调用以下命令:PDOException$db

$db = new PDO("...");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

答案 2

我最近一直在使用PDO,上面的答案是完全正确的,但我只想记录以下内容也有效。

$nametosearch = "Tobias";
$conn = new PDO("server", "username", "password");
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sth = $conn->prepare("SELECT `id` from `tablename` WHERE `name` = :name");
$sth->bindParam(':name', $nametosearch);
// Or sth->bindParam(':name', $_POST['namefromform']); depending on application
$sth->execute();

推荐