【问题标题】:mysqli prep statement error (bind_param) [duplicate]mysqli prep 语句错误(bind_param)[重复]
【发布时间】:2013-06-21 08:22:03
【问题描述】:

这是this question 的骗子,但从未有人回答。所以我要讲我的故事了!

<?php

include("connect.php");

$keyz = $_GET['id'];

mysqli_real_escape_string($db, $keyz);

if(!empty($_POST)){

    $query = $db->prepare("UPDATE talents SET (firstName,lastName,gender,dob,email,streetAddress,phoneNumber,city,state,country,zip,eyeColor,hairColor,height,weight,chest,waist,hips,dressSize,shoeSize) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) WHERE pk = ?");
    $query->bind_param('sssssssssssssssssssss',$_POST['firstName'],$_POST['lastName'],$_POST['gender'],$_POST['dob'],$_POST['email'],$_POST['streetAddress'],$_POST['phoneNumber'],$_POST['city'],$_POST['state'],$_POST['country'],$_POST['zip'],$_POST['eyeColor'],$_POST['hairColor'],$_POST['height'],$_POST['weight'],$_POST['chest'],$_POST['waist'],$_POST['hips'],$_POST['dressSize'],$_POST['shoeSize'],$keyz);
    $query->execute();
    $db->close();

    print_r($_POST['firstName'] . " " . $_POST['lastName'] . " has been updated.");

}

$query = "SELECT * FROM talents WHERE pk = " . $keyz;

if(!$result = $db->query($query)){
    die('There was an error running the query [' . $db->error . ']');
}

while($row = $result->fetch_assoc()){

?>
.
.
.
On to populate edit form

Connect.php(这是在我的本地开发机器上):

$db = new mysqli('localhost', 'root', '', '[password]');

if($db->connect_errno > 0){
    die('Unable to connect to database [' . $db->connect_error . ']');
}

我得到了错误:

Fatal error: Call to a member function bind_param() on a non-object in C:\Program Files (x86)\EasyPHP-DevServer-13.1VC9\data\localweb\FuseTalent\editTalent.php on line 80

我已经尝试了 danzan 在另一个问题中的建议和var_dump $query,但它返回的只是bool(false)。

我做错了什么?我从另一个工作页面复制/粘贴/调整了代码。

【问题讨论】:

  • 我其实是this one的骗子
  • I copied/pasted/tweaked the code from another working page. 是的,这是主要问题。

标签: php database mysqli prepared-statement


【解决方案1】:

mysqli->prepare() 如果出现问题,则返回 FALSE。这将导致{FALSE}-&gt;bindParam(...); 被调用,这将解释错误消息call to a member function ... on a non-object。
为您的脚本添加更多错误处理

$query = $db->prepare("UPDATE talents SET ...");
if ( !$query ) {
    // something went wrong
    // $db->errno and $db->error should contain more information about the error
    // see http://docs.php.net/manual/en/mysqli.error.php
    ...
}

还可以看看 MySQL 的UPDATE syntax。这是

UPDATE talents SET
firstName=?,
lastName=?,
...
WHERE
...

【讨论】:

  • 返回语法错误。你不能捆绑像 insert?? 之类的值?
  • 繁琐地重做 sql 就可以了。对 *unwise 来说,不要捆绑更新值!
  • 你的 MySQL 服务器和文档都说“不”,所以显然你不能;-)
猜你喜欢
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-02
相关资源
最近更新 更多