在使用MySQL,PHP和ADODB准备好的声明参数化IN子句(Parameterised IN C

2019-06-24 16:09发布

我写一些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));
?>

Answer 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);

这应该这样做...



Answer 2:

首先的一些技巧:

  1. 请仔细阅读预处理语句的ADODB文档。
  2. 决不包括: 在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安装)。



文章来源: Parameterised IN Clause in prepared statement using MySql,PHP and ADODB