如何在PHP中将N个参数传递到准备好的SQL语句中?

时间:2011-09-13 13:36:35

标签: php mysql

我正在尝试使用数组传入未知数量的参数(从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个参数的有效方法是什么?

2 个答案:

答案 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) ."' ";