如何使用比mysqli_stmt_bind_param()方法中的参数更多的变量来修复错误

时间:2019-05-12 12:08:12

标签: php mysqli

我正在学习如何使用PHP向数据库添加值,但是我在某些代码库中要向数据库添加值时遇到了问题。

我在下面尝试了此代码,但每次收到此警告时: mysqli_stmt_bind_param():变量数与C:\ path \ to \ the \ file.php中已准备好的语句中的参数数不匹配第38行

第38行是具有 mysqli_stmt_bind_param()方法

的行
$sql  = "INSERT INTO times(uid,a,b,c,d,e,f,g,t12,t13,t14,t15,t16,t17,t18,t19,t20) VALUES ('?','?','?','?','?','?','?','?',?,?,?,?,?,?,?,?,?);";

  $stmt = mysqli_stmt_init($conn);
  if (!mysqli_stmt_prepare($stmt, $sql)) {
    header("Location: ../index.php?error=sqlerror");
    exit();
  }
  else {
    mysqli_stmt_bind_param($stmt, "sssssssssssssssss", $uid, $a, $b, $c, $d, $e, $f, $g, $t12, $t13, $t14, $t15, $t16, $t17, $t18, $t19, $t20);
    mysqli_stmt_execute($stmt);
    echo "done!";
  }

数据库中的 uid,a,b,c,d,e,f g 列为 TINYTEXT 类型,其他为列是 TINYINT(1)类型。

第38行的$ sql变量中有17个问号,而 mysqli_stmt_bind_param() methon中有确切的17 s和参数。 我期望这些值将被添加到数据库的表中,但是我只能在网站上看到此警告,而数据库中没有任何值。

有人可以帮助我解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

尝试将第一行更改为:

$sql  = "INSERT INTO times(uid,a,b,c,d,e,f,g,t12,t13,t14,t15,t16,t17,t18,t19,t20) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

SQL语句中不应使用参数标记?

答案 1 :(得分:0)

尝试将问号占位符放在单引号内。 '?'是由单个问号组成的字符串。它不是参数的占位符。