Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在PDO中传递多个参数_Php_Mysql_Pdo - Fatal编程技术网

Php 在PDO中传递多个参数

Php 在PDO中传递多个参数,php,mysql,pdo,Php,Mysql,Pdo,我的PHP如下所示: $diagSel = $_POST['diagSel']; $search_crit = $_POST['criteria']; //this is an entry like "85054,85206" (no quotes) $sql1 = "SELECT * FROM `myTable` where`Diagnosis` = :diagnosis and `zip_code` in (:placeHolder) group by `Provider Number`";

我的PHP如下所示:

$diagSel = $_POST['diagSel'];
$search_crit = $_POST['criteria']; //this is an entry like "85054,85206" (no quotes)
$sql1 = "SELECT * FROM `myTable` where`Diagnosis` = :diagnosis and `zip_code` in (:placeHolder) group by `Provider Number`";
$stmt = $dbh->prepare($sql1);
$stmt->bindParam(':diagnosis', $diagSel, PDO::PARAM_STR);
$stmt->bindParam(':placeHolder', $search_crit, PDO::PARAM_STR);
$stmt->execute();
$result1 = $stmt->fetchAll(PDO::FETCH_ASSOC);
header('Content-type: application/json');
echo json_encode($result1);
$diagSel     = $_POST['diagSel'];
$search_crit = $_POST['criteria'];
$list        = explode(',', $search_crit);
array_map(array($dbh, 'quote'), $list);

$sql1 = sprintf('
  SELECT *
  FROM `myTable`
  WHERE `Diagnosis` = :diagnosis
  AND `zip_code` IN (%s)
  GROUP BY `Provider Number`', implode(',', $list));

$stmt = $dbh->prepare($sql1);
$stmt->bindParam(':diagnosis', $diagSel, PDO::PARAM_STR);
$stmt->execute();

$result1 = $stmt->fetchAll(PDO::FETCH_ASSOC);
header('Content-type: application/json');
echo json_encode($result1);
问题就出在这里……如果用户输入多个逗号分隔的邮政编码(传入
标准
),这
回音
就什么都没有了。如果他们只输入一个邮政编码,它将返回我所期望的结果

是否有一种方法可以通过PDO(例如8505485206)使用准备好的语句传递逗号分隔的值


谢谢。

不是,我推荐这样的:

$diagSel = $_POST['diagSel'];
$search_crit = $_POST['criteria']; //this is an entry like "85054,85206" (no quotes)
$sql1 = "SELECT * FROM `myTable` where`Diagnosis` = :diagnosis and `zip_code` in (:placeHolder) group by `Provider Number`";
$stmt = $dbh->prepare($sql1);
$stmt->bindParam(':diagnosis', $diagSel, PDO::PARAM_STR);
$stmt->bindParam(':placeHolder', $search_crit, PDO::PARAM_STR);
$stmt->execute();
$result1 = $stmt->fetchAll(PDO::FETCH_ASSOC);
header('Content-type: application/json');
echo json_encode($result1);
$diagSel     = $_POST['diagSel'];
$search_crit = $_POST['criteria'];
$list        = explode(',', $search_crit);
array_map(array($dbh, 'quote'), $list);

$sql1 = sprintf('
  SELECT *
  FROM `myTable`
  WHERE `Diagnosis` = :diagnosis
  AND `zip_code` IN (%s)
  GROUP BY `Provider Number`', implode(',', $list));

$stmt = $dbh->prepare($sql1);
$stmt->bindParam(':diagnosis', $diagSel, PDO::PARAM_STR);
$stmt->execute();

$result1 = $stmt->fetchAll(PDO::FETCH_ASSOC);
header('Content-type: application/json');
echo json_encode($result1);

如果要向SQL查询添加多个值,则不能使用bindpram两次。在exec命令中添加一个数组以添加所有变量

使用支持数组绑定的ORM或PDO包装(Aura.SQL允许,其他允许Perl样式的
列表占位符)。或者:对CSV列表使用
FIND_IN_SET()
。以前很少使用
方法……你能举个例子吗?这不是PDO。这需要在顶部有一个允许此类占位符的抽象库。否则你就得求助了。谢谢。这行少了什么<代码>数组映射([$dbh,'quote'],$list)获取错误:
调用未定义的函数sprtinf()
实际上…错过了一件事…但现在获取此错误:
语法错误,意外的“[”,预期的“”
这是指
数组映射
行。很抱歉,第一行是打字错误,第二行我相信您有旧版本的PHP(5.4之前)。现在试试!我以为我是在PHP5.4上,但可能不是。我尝试了上面的方法,现在得到了这个错误:“未捕获的异常'PDOException',消息'SQLSTATE[HY093]:无效参数号'”,指的是
执行
lineNevermind…错过了
(%s)
在查询中。它工作得很好!感谢您的帮助。好的……有没有其他方法的建议?$shtm->执行(数组(':diagnosis'=>$diagSel',:placeHolder'=>$search\u crit));谢谢……这让我回到了开始的地方。如果我传递了一个邮政编码,它工作得很好。如果我传递了多个邮政编码,它就不工作了(
ECHO
s nothing)使用while循环返回所有结果抱歉…PHP有点麻烦…你能告诉我正确的方向吗?