【问题标题】:Call to a member function bind_param() on a non-object when inserting database information插入数据库信息时在非对象上调用成员函数 bind_param()
【发布时间】:2012-10-24 21:12:48
【问题描述】:

这是我第一次使用Mysqli,所以在向数据库中添加信息时我有点迷茫。这是我的脚本。

<?php
include("config.php");

$username = $_POST['username'];
$password = $_POST['password'];
$passcheck = $_POST['password-check'];
$email = $_POST['email'];
$address = $_POST['address'];
$suite = $_POST['apt'];
$city = $_POST['city'];
$state = $_POST['state'];
$zip = $_POST['zip'];
$passcrypt = md5($passcheck);

if($_POST['submit']){
$stmt = $db->prepare("SELECT * FROM `accounts` WHERE `username`= ?");
$stmt->bind_param('s', $username);
$stmt->execute();
if($stmt->num_rows != 0){
$final_report = "That username already exists.";
}
if($password <> $passcheck){
$final_report = "Your passwords do not match";
}
if($final_report == NULL){
$stmt = $db->prepare("INSERT INTO `accounts` (`email`, `username`, `password`, `address`, `city`, `state`, `zip`) VALUES (?, ?, ?, ?, ?, ?, ?)");
if (false === $stmt) {
    var_dump($db->error);
}
$stmt->bind_param('sssssss',$email, $username, $passcrypt, $address, $city, $state, $zip);
$stmt->execute();
}
$stmt->close();
}
?>
<form method="POST" action="">
<?php
if($final_report != NULL){
print"{$final_report}";
}
?>
<table>
<tr>
<td>Username:</td>
<td><input type="text" name="username" /></td>
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="password" /></td>
</tr>
<tr>
<td>Repeat Password:</td>
<td><input type="password" name="password-check" /></td>
</tr>
<tr>
<td>E-Mail:</td>
<td><input type="text" name="email" /></td>
</tr>
<tr>
<td>Address:</td>
<td><input type="text" name="address" /></td>
</tr>
<tr>
<td>Apt #/Suite:</td>
<td><input type="text" name="apt" /></td>
</tr>
<tr>
<td>City:</td>
<td><input type="text" name="city" /></td>
</tr>
<tr>
<td>State:</td>
<td><input type="text" name="state" /></td>
</tr>
<tr>
<td>Zip Code:</td>
<td><input type="text" name="zip" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" name="submit" value="Submit" /></td>
</tr>
</table>
</form>

这些是提交页面后我返回的错误。 Notice: Undefined variable: final_report in C:\xampp\htdocs\gptcode\signup.php on line 25

string(0) ""

Fatal error: Call to a member function bind_param() on a non-object in C:\xampp\htdocs\gptcode\signup.php on line 30

我显然并不担心通知,但 vardump() 没有显示任何内容,所以我不确定是什么导致了 bind_param() 的错误我有三次检查表和列名称。如果这里的代码是正确的,那么我的问题是,如果实际表中列出了更多的值和列,是否会产生这样的错误,因为我没有在 prepare 语句中包含所有列?

【问题讨论】:

标签: php database mysqli fatal-error var-dump


【解决方案1】:

未定义的 var 不为 NULL 使用 isset($varname)

如果你使用 PDO,它的 bindParam 不是 bind_param

如果只使用一次为什么要绑定参数,给一个数组来执行():

$stmt = $db->prepare("INSERT INTO `accounts` (`email`, `username`, `password`, `address`, `city`, `state`, `zip`) VALUES (:email, :username, :password, :address, :city, :state, :zip)");

$stmt->execute(array(
  ':email' => $mail,
  ':username' => $username,
.... and so on.
));

【讨论】:

  • 我正在使用 Mysqli,我认为它会比 PDO 更容易开始。
  • 唯一真正的区别是,使用 pdo 您可以使用不同的数据库。语法几乎相同。
  • 我知道它不仅限于像mysqli这样的Mysql,我只是习惯了旧的mysql_query,所以我不知道从哪里开始。如果我在使用 mysqli 时无法解决此问题,我将更改为 PDO,看看它是否符合您的建议。
猜你喜欢
  • 2015-02-02
  • 2014-06-19
  • 1970-01-01
  • 2011-05-28
  • 2015-10-24
  • 2013-09-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多