相关疑难解决方法(0)

PHP - 将PDO与IN子句数组一起使用

我正在使用PDO执行一个带有IN子句的语句,该子句使用数组作为它的值:

$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();
$my_results = $my_result->fetchAll();
Run Code Online (Sandbox Code Playgroud)


上面的代码完全正常,但我的问题是为什么这不是:

 $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();
Run Code Online (Sandbox Code Playgroud)

此代码将返回my_value等于$in_array(1)中第一项的项,但不返回数组中的其余项(2和3).

php mysql pdo prepared-statement in-clause

60
推荐指数
3
解决办法
5万
查看次数

多次使用绑定参数

我正在尝试为我的数据库实现一个非常基本的搜索引擎,其中用户可能包含不同类型的信息.搜索本身由几个联合选择组成,其中结果总是合并为3列.

然而,返回的数据是从不同的表中获取的.

每个查询使用$ term进行匹配,我将它作为准备参数绑定到":term".

现在,手册说:

调用PDOStatement :: execute()时,必须为要传递给语句的每个值包含唯一的参数标记.您不能在预准备语句中两次使用同名的命名参数标记.

我想,不是用termex替换每个:term参数:termX(x为term = n ++),必须有一个更好的解决方案吗?

或者我只需绑定X号:termX?

编辑发布我的解决方案:

$query = "SELECT ... FROM table WHERE name LIKE :term OR number LIKE :term";

$term = "hello world";
$termX = 0;
$query = preg_replace_callback("/\:term/", function ($matches) use (&$termX) { $termX++; return $matches[0] . ($termX - 1); }, $query);

$pdo->prepare($query);

for ($i = 0; $i < $termX; $i++)
    $pdo->bindValue(":term$i", "%$term%", PDO::PARAM_STR);
Run Code Online (Sandbox Code Playgroud)

好的,这是一个样本.我没有时间使用sqlfiddle,但如果有必要,我会稍后添加一个.

(
    SELECT
        t1.`name` AS resultText
    FROM table1 AS t1
    WHERE
        t1.parent = :userID
        AND …
Run Code Online (Sandbox Code Playgroud)

php mysql sql pdo

31
推荐指数
3
解决办法
2万
查看次数

如何在YII框架中绑定数组参数?

我有以下情况的PHP:

$inputs = "1,2,3,4,5";
$sql = "SELECT * FROM obj WHERE id IN(:input)";

$commond = Yii::app()->db->createCommand($sql);
$commond->bindValue(":input", $inputs , PDO::PARAM_STR);
Run Code Online (Sandbox Code Playgroud)

我用yii提供db函数:

$inputs = "1,2,3,4,5";
$sql = "SELECT * FROM obj WHERE id IN(:input)";

$commond = Yii::app()->db->createCommand($sql);
$commond->bindValue(":input", $inputs , PDO::PARAM_STR);
Run Code Online (Sandbox Code Playgroud)

但查询结果是正确的,所以如果这样我该怎么办?

php yii yii1.x

9
推荐指数
2
解决办法
2万
查看次数

标签 统计

php ×3

mysql ×2

pdo ×2

in-clause ×1

prepared-statement ×1

sql ×1

yii ×1

yii1.x ×1