我正在尝试使用数组传入未知数量的参数(从1-10开始)以准备我的SQL语句以便在PHP中执行。
function executeStatement ($myArray) {
//for example, $myArray = ("one", "two", "three")
$qry = "SELECT * FROM table WHERE FieldA LIKE ".$myArray[0]." OR FieldA LIKE ".$myArray[1]." OR FieldA LIKE ".$myArray[2].";
$result = mysql_query($qry) or die("Query failed with error: ".mysql_error());
}
使用数组传递N个参数的有效方法是什么?
答案 0 :(得分:0)
不确定如何使用准备好的声明,但如果我正确理解问题,下面的内容应该有效
$queryStr = "SELECT * FROM `table` WHERE ";
foreach($myArray as $single){
$queryStr .= "$addStr`FieldA` LIKE '".mysql_real_escape_string($single)."'"; //Note the mysql_real_escape_string, this should help guard against sql injection
$addStr = ' OR ';
}
$query = mysql_query($queryStr) or die(mysql_error());
此外,我建议使用=而不是LIKE,除非您打算使用通配符
答案 1 :(得分:0)
预准备语句表示正确转义值以保护数据库免受攻击的语句。
这不是你所拥有的,你真的需要自己逃避价值观,也许你在其他地方这样做,但我看不到它。
要回答您的问题,请尝试以下方法:
function executeStatement ($myArray) {
//for example, $myArray = array("one", "two", "three")
$qry = "SELECT * FROM table WHERE ";
foreach( $myArray as $arr ){
$flds[] = "FIELDA = '$arr' ";
}
$qry .= join(" OR " , $flds );
echo $qry;
}
如果您的值未在其他地方转义,请执行以下操作:
$flds[] = "FIELDA = '". mysql_real_escape_string($arr) ."' "
;
请注意,您还使用了LIKE而没有引用字符串,并且您没有在LIKE中使用的通配符,因此我测试了匹配。
LIKE看起来更像是这样:
$flds[] = "FIELDA LIKE '%". mysql_real_escape_string($arr) ."' ";