Php 在PDO中传递多个参数
我的PHP如下所示: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`";
$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有点麻烦…你能告诉我正确的方向吗?