脚本宝典收集整理的这篇文章主要介绍了php – PDO混合未命名和命名参数,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
$construct = '? AND ? AND..'; $query = $database->PRepare('SELECT * From something WHERE something LIKE ' . $construct . ' LIMIT :offset,:results');
我混合它们的唯一原因是因为未命名的参数不能具有int值,因为显然存在PHP错误:https://bugs.php.net/bug.php?id=44639
更新
搞砸了之后,我使用命名参数和一些循环或多或少地解决了它:
// build prepared statement $construct = ''; for ($x = 0; $x <= $seArchArrayCount; $x++) { $construct .= ($x < $searchArrayCount) ? ":VAR$x OR name LIKE " : ":var$x LIMIT :start,:PErPage"; } $query = $database->prepare('SELECT something From something WHERE name LIKE ' . $construct); // bind parameters for ($x = 0; $x <= $searchArrayCount; $x++) { $searchArray[$x] = "%$searchArray[$x]%"; $query->bindParam(":var$x",$searchArray[$x]); } $query->bindParam(':start',$searchArrayCount,PDO::PARAM_INT); $query->bindParam(':perPage',$perPage,PDO::PARAM_INT);
如果有更优化的方式来解决这个问题,我很乐意被告知.
变量数据类型可能存在问题.之前使用intval()函数是很好的.
您在未命名数据类型中的解决方案可能如下所示:
$counter = 0; //build prepared statement $query = $database->prepare('SELECT something FROM something WHERE 0 OR '. implode(' OR ',array_fill(0,'name LIKE ?')). ' LIMIT ?,?'); // bind parameters foreach($searchArray as $value) { $counter++; $query->bindValue($counter,('%'.$value.'%'),PDO::PARAM_STR); } $query->bindValue(($counter+1),($page*$perPage),PDO::PARAM_INT); $query->bindParam(($counter+2),PDO::PARAM_INT);
注意我在bind@R_185_1403@之前使用了bindValue().请注意LIMIT的第一个参数.如果计数将在此处,则选择将从数据末尾开始,并且不返回任何行.
以上是脚本宝典为你收集整理的php – PDO混合未命名和命名参数全部内容,希望文章能够帮你解决php – PDO混合未命名和命名参数所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。