-1

我正在尝试通过 PHP 访问 MySQL,但我收到了这些错误消息。

注意:未定义变量:第 60 行 /var/www/contact.php 中的 stmt

致命错误:在第 63 行的 /var/www/contact.php 中的非对象上调用成员函数 bind_param()

我的代码:

<?php

$servername = "localhost";
$username = "test";
$password = "test";
$dbname = "test";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// LINE 60
if(!$stmt = $conn->prepare("INSERT INTO MyGuests VALUES(?, ?, ?)") || !is_object($stmt)){
    die( "Error preparing: (" .$conn->errno . ") " . $conn->error);
}
//LINE 63
$stmt->bind_param("sss", $firstname, $lastname, $email) ;
4

3 回答 3

2

简化您的错误检测。将赋值语句括在括号中。忘记 is_object()。试试这个。

if( !( $stmt = $conn->prepare( "INSERT INTO MyGuests VALUES(?, ?, ?) " ) ) {
    die( "Error preparing: (" .$conn->errno . ") " . $conn->error);
}

通常最好在INSERT语句中拼出列名,像这样

INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)

如果表的列与您的想法不完全一致,那么您的 INSERT 将无法在不枚举列的情况下正常工作。w3schools上的示例恰好是这种情况。他们MyGuests使用比您在 INSERT 中使用的更多的列来定义表。

以与 prepare 相同的方式对 bind_param 进行错误检测。

在使用它们之前定义您在 bind_param() 中使用的变量。试试这个:

$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";

if (!$stmt->bind_param("sss", $firstname, $lastname, $email)) {
    die( "Error in bind_param: (" .$conn->errno . ") " . $conn->error);
}
$stmt->execute();

w3学校?真的吗?朋友不要让朋友......等等。

于 2014-10-25T21:23:29.423 回答
0

第一个错误

注意:未定义变量:第 60 行 /var/www/contact.php 中的 stmt 您必须在使用之前声明变量。像那些变量一样:

$servername = "本地主机";

$用户名=“测试”;

$密码=“测试”;

$dbname = "测试";

定义stmt变量

$stmt = " ";

或将其从 if 语句中删除

$stmt = $conn->prepare("INSERT INTO MyGuests VALUES(?, ?, ?)")

这将解决您的错误

于 2014-10-25T21:19:14.063 回答
0

对象是 $conn,所以如果你想将它包含在 if 语句中,你可以但不是必须的。我假设 MyGuests 表作为 id 列和 lastname、fisrtname、email 列。您需要在 SQL 中指定实际列“INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)”

变量 $stmt 尚未定义。所以你不能说!$stmt,这个函数不会不起作用。执行以下操作:

$stmt = "";
if(!($stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)"))){
    die( "Error preparing: (" .$conn->errno . ") " . $conn->error);
}

$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";

if(!($stmt->bind_param("sss", $firstname, $lastname, $email))){
    die( "Error in bind_param: (" .$conn->errno . ") " . $conn->error);
}


$stmt->execute();
于 2014-10-25T21:33:32.207 回答