1

準備済みステートメントを使用するのはこれが初めてで、問題が発生しています。次のコードを実行すると、次のようなエラー メッセージが表示されます。

警告: mysqli_stmt_bind_param() [function.mysqli-stmt-bind-param]: Number of elements in type definition string does not match number of bind variables in ... 49 行目

行 49 は、以下の mysqli_stmt_bind_param ステートメントです。文字列の数(「ssssss」)がそのステートメントの正しい文字列の数と一致しているように見えるので、ちょっと途方に暮れています。

<?php

$var1 = $_POST['var1'];
$var2 = $_POST['var2'];
$var3 = $_POST['var3'];
$var4 = $_POST['var4'];
$var5 = $_POST['var5'];
$var6 = $_POST['var6'];

      if (!empty($var1)&&!empty($var2)&&!empty($var3)
      &&isset($var4, $var5, $var6));

      require_once 'connect.inc.php';

      $query = "INSERT INTO tablename (var1, var2, var3, var4, var5, var6)
      VALUES ('$var1','$var2','$var3','$var4','$var5', '$var6')";

      $stmt = mysqli_prepare($link, $query);

      mysqli_stmt_bind_param($stmt, "ssssss", $var1, $var2, $var3, $var4, $var5, 
      $var6);

      mysqli_stmt_execute($stmt);

      if (mysqli_stmt_affected_rows($stmt)==1);

      mysqli_stmt_close($stmt);

      $result = mysqli_query($link, $query);

      if ($result) {
        echo 'Thank you for your submission.';
        }    
      else {
          echo 'We were unable to process your information.'.mysqli_error($link).'
          Please ensure all required fields were filled out.;
          }

      mysqli_close($link);
?>

どんな助けでも大歓迎です!ありがとうございました!ところで、私は「提出していただきありがとうございます」を受け取ります。メッセージ。

4

2 に答える 2

3

クエリを次のように変更します。

$query = "INSERT INTO tablename (var1, var2, var3, var4, var5, var6)
      VALUES (?,?,?,?,?, ?)";

バインディング用のパラメーターを設定したことを伝えるため。

于 2013-07-27T00:02:24.410 に答える
2

問題はフォーマットと一致していません。バインドするパラメーターがないことです。パラメーターは?、クエリのプレース ホルダーとして使用する必要があります。

$query = "INSERT INTO tablename (var1, var2, var3, var4, var5, var6)
          VALUES ('$var1','$var2','$var3','$var4','$var5', '$var6')";

する必要があります

$query = "INSERT INTO tablename (var1, var2, var3, var4, var5, var6)
      VALUES (?, ?, ?, ?, ?, ?)";   // <-- six place holders for the parameters
于 2013-07-27T00:02:49.360 に答える