小编典典

使用MySql,PHP和ADODB在准备好的语句中参数化IN子句

sql

我正在编写一些SQL,并使用AdoDb连接到我的数据库并运行查询等等。我正在使用参数化查询,并且遇到了麻烦。

它们是将值的数组传递给AdoDb / MySql中的in_clause进行参数化的一种方法。

我的问题是,如果我将准备好的字符串作为参数传递,即 ‘test’,’test2’,’test3’,
则它不起作用,因为库或数据库会自动对其进行转义并在开头和结尾处添加外部引号,因此所有内部引号随后会自动转义,因此查询不返回任何内容,因为它查找的是
‘'test ','test2 ','test3 '‘ ,而不是我输入的内容。

更新了另一种可能的方法来完成此操作

<?php
$in_clause = implode(",", $first_names);

$query = "
SELECT    
    mytable_id_pk
FROM 
    mytable
WHERE
FIND_IN_SET(mytable_fname," . $DB->Param('first_names') . ")"

$stmt = $DB->Prepare($query);

$result = $DB->Execute($stmt,array($in_clause));
?>

阅读 366

收藏
2021-04-07

共1个答案

小编典典

我会以这种方式进行操作(因为我搜索了一段时间,而Google却没有任何用处):

$count = count($first_names);
$in_params = trim(str_repeat('?, ', $count), ', ');

$query = "
SELECT    
    mytable_id_pk
FROM 
    mytable
WHERE
    mytable_fname IN ({$in_params});";

$stmt = $DB->Prepare($query);
$result = $DB->Execute($stmt, $first_names);

这应该做的…

2021-04-07