在绑定参数中使用组合变量不起作用

时间:2014-01-02 15:06:44

标签: php sql variables sqlbindparameter

当我使用一个多变量组合成一个php变量并在bind param中使用该变量时,它不起作用并显示错误。

让我解释一下:

我将post数据,sql列和sql表详细信息存储在如下变量中:

$user_input_ab = $_POST['ab'];
$user_input_cd = $_POST['cd'];
$user_input_ef = $_POST['ef'];
$user_input_gh = $_POST['gh'];


$sqlTable = 'abcd_list';
$sqlColumns = 'ab, cd, ef, gh';
$sqlValues = $user_input_ab .','. $user_input_cd .','. $user_input_ef .',' . $user_input_gh;

SQL Prepare语句如下:

$stmt = $mysqli->prepare("INSERT INTO $sqlTable ($sqlColumns) VALUES (?, ?, ?, ?)");

到目前为止上述工作。但是如果我在bind语句中使用组合变量$sqlValues,它就不起作用:

$rc = $stmt->bind_param("ssss", $sqlValues);

以上不起作用。它给出了以下错误:

Warning: mysqli_stmt::bind_param() [mysqli-stmt.bind-param]: Number of elements in type definition string doesn't match number of bind variables

但是如果我将bind_param更改为this,那么它可以工作:

$rc = $stmt->bind_param("ssss", $user_input_ab, $user_input_cd, $user_input_ef, $user_input_gh);

那么为什么它有效?错误表示元素的数量不匹配,但是当我使用$sqlValues时,是否应填充其中的4个元素?

如果您想知道我为什么使用变量,它只是为了让以后更容易编辑,所以我可以保持其余的SQL查询完整。

1 个答案:

答案 0 :(得分:1)

它无法正常工作,因为它只看到一个参数,它假定$ sqlValues是一个单独的字符串。 (AKA它试图将它们全部存储在ab列中。)

我不相信除了使用数组之外还有其他方法,但

$rc = $stmt->bind_param("ssss", $user_input_ab, $user_input_cd, $user_input_ef, $user_input_gh);

(这就是你所拥有的)要简单得多。