0

我花了一整天的时间试图找出这个问题,但没有运气。我已经看到了一些直接将常量用作参数的问题。我所有的论点都是变量。我错过了一些非常明显的东西吗?

$one = 1;
$two = 2;
$three = 3;

if (  !($stmt = $mysqli->prepare('INSERT INTO test3 (one, two, three) VALUES (?, ?, ?)'))  ) {
  echo "Prepare failed (".$stmt->errno.") ".$stmt->error."\n";
  $stmt->close();
  exit();
}

if (  !($stmt->bind_param('iii',$one,$two,$three))  ) {
  echo "Failed to bind (".$stmt->errno.") ".$stmt->error;
  $stmt->close();
  exit();
}

if (  !($stmt->execute)  ) {
  echo "Execute failed (". $stmt->errno.") ". $stmt->error."\n";
  $stmt->close();
  exit();
}

编辑:我实际上正在使用bind_param但在尝试不同的东西后忘记将其更改回来。代码按原样复制和粘贴。将 bind_value 改回 bind_param 后,我仍然得到同样的错误。

编辑 2:我觉得很愚蠢,我用一个新名称保存了我的 php 文件,这样我就可以简化代码,但我忘记更改 POST 方法的 url 以反映该更改。所以我现在得到的错误是:Undefined property: mysqli_stmt::$execute以及mysql日志中的相应输出:

42 Connect     test@localhost on testdb
42 Prepare     [1] INSERT INTO test3 (one, two, three) VALUES (?, ?, ?)
42 Quit       
4

3 回答 3

0

在下面的代码中,我添加了一行代码。我遇到了同样的问题并再次检查文档这解决了我的问题。

$one = 1;
$two = 2;
$three = 3;

// This fixed my problem 
$stmt =  $mysqli->stmt_init();

if (  !($stmt = $mysqli->prepare('INSERT INTO test3 (one, two, three) VALUES (?, ?, ?)'))  ) {
  echo "Prepare failed (".$stmt->errno.") ".$stmt->error."\n";
  $stmt->close();
  exit();
}

if (  !($stmt->bind_param('iii',$one,$two,$three))  ) {
  echo "Failed to bind (".$stmt->errno.") ".$stmt->error;
  $stmt->close();
  exit();
}

if (  !($stmt->execute)  ) {
  echo "Execute failed (". $stmt->errno.") ". $stmt->error."\n";
  $stmt->close();
  exit();
}

在此处查看文档http://us.php.net/manual/en/mysqli.stmt-init.php 您还将在mysqli::prepare 页面中看到它正在使用

于 2014-03-13T12:56:21.743 回答
0

如果您使用 mysqli,则必须使用 bind_param 而不是 bind_value:

if (  !($stmt->bind_param('iii',$one,$two,$three))  ) {
  echo "Failed to bind (".$stmt->errno.") ".$stmt->error;
  $stmt->close();
  exit();
}

BindValue 仅适用于 PDO 类。

于 2013-01-05T14:28:40.800 回答
0

您输入错误:$stmt->execute execute不是属性,而是方法。

没有属性称为execute,这就是日志说的原因undefined property

您的代码应如下所示:

if (  !($stmt->execute())  ) {
  echo "Execute failed (". $stmt->errno.") ". $stmt->error."\n";
  $stmt->close();
  exit();
}

希望这会有所帮助

于 2016-03-04T12:48:12.370 回答