【发布时间】:2017-05-27 21:36:01
【问题描述】:
很确定有一个简单的解决方法,但是在涉及 PDO 语句时我在数组处理方面缺乏经验
目的:从数据库中检索一组id,然后使用这些id进行比较和检索
$SAList = getSecurityActionsForQuestion("$QID");
$con = database::getInstance()->getConnection();
$ParentList = $con->prepare('SELECT SQ.SurveyQuestionID, SQ.SurveyQuestionDesc
FROM SurveyQuestion SQ
JOIN SurveyQuestionLookup SQLP ON SQLP.SurveyQuestionID = SQ.SurveyQuestionID
WHERE SQLP.SecurityActionID IN (:SAList)
AND SQLP.SurveyQuestionID != :QID');
$ParentList->bindValue(':QID',$QID, PDO::PARAM_STR);
$ParentList->bindValue(':SAList',$SAList, PDO::PARAM_STR);
$ParentList->execute();
$Results = $ParentList->fetchAll();
现在,'getSecurityActionForQuestion' 函数和插入的 select 语句都可以单独工作并检索我想要的内容。问题是我无法将数组发送到 PDO::PARAM_STR 并且我还没有找到解决此问题的方法。
我已经看到了一些内爆和准备字符串的选项,但我不完全确定如何将其合并到我当前的设计中。
有可能使用 foreach 循环创建一个新数组,保存一个计数变量,然后在 SQL 语句中,我可以插入一堆命名参数,然后使用另一个 for 循环将每个参数绑定到它们各自的地方,但我很确定那里的某个人有一个比那个 hackjob 更优雅的过程。
编辑:
为了清楚起见,添加了 getSecurityActionsForQuestion(ID) 函数
function getSecurityActionsForQuestion($QID)
{
$con = database::getInstance()->getConnection();
$SAList = $con->prepare("SELECT DISTINCT SecurityActionID FROM SurveyQuestionLookup
WHERE SurveyQuestionID = :QID");
$SAList->bindValue(':QID',$QID,PDO::PARAM_INT);
$SAList->execute();
$Results = $SAList->fetchAll();
$SAList=null;
$con=null;
return $Results;
}
【问题讨论】:
标签: php mysql arrays pdo parameters