现在,我需要使用以下结构来将多个参数绑定到mysqli查询中:

if ($words_total == 1)
{
    $statement -> bind_param("s", $words[0]);
}
else if ($words_total == 2)
{
    $statement -> bind_param("ss", $words[0], $words[1]);
}
else if ($words_total == 3)
{
    $statement -> bind_param("sss", $words[0], $words[1], $words[2]);
}

//and so on....


我使用下面的代码计算出问号的数量和将其插入我的查询中:

$marks = "";
for($i = 1; $i<=$words_total; $i++) {
    if ($i == $words_total)
    {
        $marks .= "?";
    }
    else
    {
        $marks .= "?,";
    }
}


我的问题肯定是必须有一种方法可以动态处理我需要的查询中的许多输入。硬编码bind_param()似乎是处理此问题的一种非常糟糕的方法。

我正在使用php版本5.4.10

#1 楼

不幸的是,默认情况下,bind_param()不接受数组而不是单独的变量。但是,由于PHP 5.6有了重大改进,因此可以解决问题。

要将任意数量的变量绑定到mysqli查询中,您将需要参数解包运算符。它将使操作尽可能简单和流畅。

例如,要将PHP数组与mysql的IN()运算符配合使用,则需要以下代码

// our array
$words = ['a','b','c']; 

// create an SQL query with placeholders and prepare it
$in    = str_repeat('?,', count($array) - 1) . '?'; //  returns ?,?,?...
$sql   = "SELECT name FROM table WHERE city IN ($in)"; 
$stmt  = $mysqli->prepare($sql);

// create the types string dynamically and bind an array
$types = str_repeat('s', count($array)); // returns sss...
$stmt->bind_param($types, ...$array); 

// execute and fetch the rows
$stmt->execute();
$result = $stmt->get_result(); // get the mysqli result
$data = $result->fetch_all(MYSQLI_ASSOC); // fetch the data   


评论


非常感谢您-我对解决这个问题的难看方法感到非常失望。我同意错误报告是我的弱点,我需要花一些时间来了解更多信息。我只像2个月前那样学习过php,所以直到现在,这都是关于尽可能多地做的事情。现在我想我可能必须更加专注于做事!!拥抱和感谢!

–艾米·内维尔(Amy Neville)
13年7月26日在13:03