首页 >后端开发 >php教程 >如何在 PHP 中正确使用 PDO 与 IN 子句和数组?

如何在 PHP 中正确使用 PDO 与 IN 子句和数组?

Susan Sarandon
Susan Sarandon原创
2024-12-19 10:06:14767浏览

How to Correctly Use PDO with an IN Clause and an Array in PHP?

PHP - 将 PDO 与 IN 子句数组结合使用

PDO 允许您执行包含带有值数组的 IN 子句的 SQL 语句。虽然此方法适用于字符串连接 (implode()),但在使用占位符时可能会导致问题。

识别问题

以下代码使用占位符,不会返回所有预期的项目:

$in_array = array(1, 2, 3);
$in_values = implode(',', $in_array);
$my_result = $wbdb->prepare("SELECT * FROM my_table WHERE my_value IN (:in_values)");
$my_result->execute(array(':in_values' => $in_values));
$my_results = $my_result->fetchAll();

此代码仅返回 my_value 等于的项目$in_array 中的第一个元素 (1),而不是其他元素(2 和 3)。

位置占位符的解决方案

PDO 需要动态创建带有占位符的字符串并将其插入到查询中,同时像往常一样绑定数组值。对于位置占位符,此解决方案有效:

$in  = str_repeat('?,', count($in_array) - 1) . '?';
$sql = "SELECT * FROM my_table WHERE my_value IN ($in)";
$stm = $db->prepare($sql);
$stm->execute($in_array);
$data = $stm->fetchAll();

命名占位符解决方案

命名占位符的方法涉及创建一系列占位符(例如:id0、 :id1, :id2) 并将值收集到键值数组中。下面是一个示例:

$ids = [1,2,3];
$in = "";
$i = 0;
foreach ($ids as $item)
{
    $key = ":id" . $i++;
    $in .= ($in ? "," : "") . $key; // :id0,:id1,:id2
    $in_params[$key] = $item; // collecting values into a key-value array
}

$sql = "SELECT * FROM table WHERE foo=:foo AND id IN ($in) AND bar=:bar";
$stm = $db->prepare($sql);
$stm->execute(array_merge(["foo" => "foo", "bar" => "bar"], $in_params)); // merge two arrays
$data = $stm->fetchAll();

通过遵循这些解决方案,您可以成功地将 PDO 与包含值数组的 IN 子句结合使用。

以上是如何在 PHP 中正确使用 PDO 与 IN 子句和数组?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn