我在这种格式的变量中使用输入值:
ny,nj,ct
并存储在此变量中:
$search_crit
然后我运行以下
$list = explode(',', $search_crit);
array_map(array($dbh, 'quote'), $list);
$sql1 = sprintf('SELECT `Provider Number`,`Number of Cases` FROM `mytable` where`color` = :colorpicked and `State` in (%s) group by `Provider Number`', implode(',', $list));
$stmt = $dbh->prepare($sql1);
$stmt->bindParam(':color', $colorSel, PDO::PARAM_STR);
$stmt->execute();
$result1 = $stmt->fetchAll(PDO::FETCH_ASSOC);
当我执行不同的查询而不是状态时,它可以正常输入邮政编码,所以我最终会得到这样的结果:and 'zipcode' in (45040,45249)
。这很好,因为它们是数字(我猜)。
回到上面的代码...如果我尝试这样的状态:and 'states' in (ny,nj,ct)
我会收到错误,说ny
不是一列。如果我可以以某种方式运行这样的查询,它可以工作:and 'states' in ('ny','nj','ct')
。
这里最好的方法是什么?有没有一种简单的方法在PHP中插入单引号?我是否应该更改查询以接受可能是任何数字的状态列表(ny,nj,ct
)(例如,3个州或15个州)?
答案 0 :(得分:0)
感谢@ Ryan_W4588指出我正确的方向来准备变量。我不得不改变我的PHP代码以适应这一点。
$list = explode(',', $search_crit);
$newList = "'" .implode("','",$list) ."'";
$sql1 = "SELECT `Provider Number`,`Number of Cases` FROM `mytable` where`color` = :colorpicked and `State` in ({$newList}) group by `Provider Number`";
$stmt = $dbh->prepare($sql1);
$stmt->bindParam(':color', $colorSel, PDO::PARAM_STR);
$stmt->execute();
$result1 = $stmt->fetchAll(PDO::FETCH_ASSOC);