【问题标题】:Using combined variable in bind param doesnt work在绑定参数中使用组合变量不起作用
【发布时间】:2014-01-20 01:38:52
【问题描述】:

当我使用将多个变量组合为一个的 php 变量并在绑定参数中使用该变量时,它不起作用并显示错误。

让我解释一下:

我将发布数据、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 (?, ?, ?, ?)");

到目前为止,上述工作。但是如果我在绑定语句中使用组合变量$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 改成这个,那么它就可以工作了:

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

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

如果你想知道我为什么要使用变量,那只是为了让以后编辑更容易,这样我就可以保持其余的 sql 查询不变。

【问题讨论】:

  • $sqlValuesone 元素:单个字符串。它包含三个逗号这一事实并没有使它成为一个包含逗号的简单字符串
  • 啊哈。当你这样说的时候才有意义。

标签: php sql variables sqlbindparameter


【解决方案1】:

它不能正常工作,因为它只看到一个参数,它假定 $sqlValues 是一个字符串。 (也就是它试图将它们全部存储在 ab 列中)。

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

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

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

【讨论】:

  • 我还尝试将 ssss 更改为 s 以匹配像 bind_param("s", $sqlValues); 这样的一个参数,但这也不起作用,因为它与列数冲突。所以我将通过添加每个变量元素来保留它。感谢您为我确认这一点。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-13
  • 1970-01-01
  • 1970-01-01
  • 2021-12-01
  • 2013-02-19
相关资源
最近更新 更多