我写一些SQL,并使用ADODB连接到我的数据库,并运行查询等。 我使用参数化查询和已经遇到障碍。
是它们的一种方法来值的数组传递到在ADODB / MySQL的参数化的in_clause。
我的问题是,如果我传递一个准备的字符串作为参数,即“测试”,“测试2”,“TEST3”不作为库或数据库自动逃脱它的工作,并在开始添加外部报价和最终使所有的内部引号,然后自动因此转义为它寻找“\”测试\无返回值“ \‘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));
?>
我会做这样(因为我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);
这应该这样做...
首先的一些技巧:
- 请仔细阅读预处理语句的ADODB文档。
- 决不包括: 在SQL查询字符串。
你可以尝试这样的事情:
$question_marks = substr(str_repeat('?,', count($first_names)), 0, -1);
$query = "SELECT mytable_id_pk FROM mytable WHERE mytable_fname IN (" . $question_marks . ")";
$stmt = $DB->Prepare($query);
$result = $DB->Execute($stmt,$first_names);
警告:我没有测试过这一点(没有在这里MySQL安装)。