dpjj4763 2013-07-26 23:58
浏览 57
已采纳

运行预准备语句(MySQL / PHP)

this is my first time working with prepared statements and I'm running into a problem. When I run the following code, I get an error message that reads:

Warning: mysqli_stmt_bind_param() [function.mysqli-stmt-bind-param]: Number of elements in type definition string doesn't match number of bind variables in ... on line 49

Line 49 is the mysqli_stmt_bind_param statement below. It seems like the number of strings ("ssssss") matches up with correct number of strings in that statement, so I'm kind of at a loss.

<?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);
?>

Any help is much appreciated! Thank you! By the way, I DO get the 'Thank you for your submission.' message.

  • 写回答

2条回答 默认 最新

  • dongtang1909 2013-07-27 00:02
    关注

    The problem is not matching up with the format, it's that you have no parameters to bind. Parameters should use ? as a place holder in the query;

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

    should be

    $query = "INSERT INTO tablename (var1, var2, var3, var4, var5, var6)
          VALUES (?, ?, ?, ?, ?, ?)";   // <-- six place holders for the parameters
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么