Php 设置和执行准备好的语句(使用mysqli)

Php 设置和执行准备好的语句(使用mysqli),php,mysql,forms,mysqli,prepared-statement,Php,Mysql,Forms,Mysqli,Prepared Statement,我在尝试运行此mysql查询/准备语句时遇到问题 <?php if (!empty($_POST['var1'])&&!empty($_POST['var2']) &&!empty($_POST['var3'])&&isset($_POST['var4'], $_POST['var5'], $_POST['var6'])) { require_once 'connect.inc.php'; $quer

我在尝试运行此mysql查询/准备语句时遇到问题

  <?php

  if (!empty($_POST['var1'])&&!empty($_POST['var2'])
    &&!empty($_POST['var3'])&&isset($_POST['var4'], 
    $_POST['var5'], $_POST['var6'])) {

  require_once 'connect.inc.php'; 

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

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

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

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

  mysqli_stmt_execute($stmt);

   if (mysqli_stmt_affected_rows($stmt)==1) {
   echo 'Thank you for your submission.';
      } else {
      mysqli_stmt_close($stmt);
      mysqli_close($link);  }

 } else {
echo 'We were unable to process your information. Please ensure all required fields 
        were filled out.'.mysqli_stmt_error($stmt);
} 

?>
第62行是末尾包含mysqli_stmt_error$stmt的行。据我所知,我已经正确设置了$stmt$链接来自connect.inc.php页面。我不确定为什么会得到给定的消息null,因为我确实有$stmt作为参数1


有人知道我做错了什么吗?

您试图捕获一个查询错误,但在显示$\u POST var错误的地方使用它。请参阅改进的代码:

  <?php

  if (!empty($_POST['var1'])&&!empty($_POST['var2'])
    &&!empty($_POST['var3'])&&isset($_POST['var4'], 
    $_POST['var5'], $_POST['var6'])) {

    require_once 'connect.inc.php'; 

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

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

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

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

     if (mysqli_stmt_affected_rows($stmt)==1) {
          echo 'Thank you for your submission.';
        } else {
          mysqli_stmt_close($stmt);
          mysqli_close($link);  

          // do something with your statement error
          echo mysqli_stmt_error($stmt);
        }

} else {
  echo 'We were unable to process your information. Please ensure all required fields were filled out.';
} 
?>

是的,我喜欢。您根本没有错误报告。这是我第一次开发一个网站。。。还在学习!给投票否决我答案的人;请仔细看一下代码,因为我指出的是完全正确的。只要删除移动$var defines的那部分,我就会删除我的下一票。但这是一个正确的添加,因为您不能绑定在绑定时定义的参数。PHP是一个解释器,这意味着它直接执行源代码。如果需要回退一个正确的编辑来删除你的否决票,请将其保留在那里。
  <?php

  if (!empty($_POST['var1'])&&!empty($_POST['var2'])
    &&!empty($_POST['var3'])&&isset($_POST['var4'], 
    $_POST['var5'], $_POST['var6'])) {

    require_once 'connect.inc.php'; 

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

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

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

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

     if (mysqli_stmt_affected_rows($stmt)==1) {
          echo 'Thank you for your submission.';
        } else {
          mysqli_stmt_close($stmt);
          mysqli_close($link);  

          // do something with your statement error
          echo mysqli_stmt_error($stmt);
        }

} else {
  echo 'We were unable to process your information. Please ensure all required fields were filled out.';
} 
?>