我试图通过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) ;
答案 0 :(得分: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中使用的列数。
对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();
W3Schools的?真?朋友不要让朋友......等等。
答案 1 :(得分:0)
第一个错误
注意:未定义的变量:第60行的/var/www/contact.php中的stmt 您必须在使用变量之前声明变量。 像那些变量一样:
$ servername =&#34; localhost&#34 ;;
$ username =&#34; test&#34 ;;
$ password =&#34; test&#34;;
$ dbname =&#34; test&#34 ;;
定义stmt变量
$ stmt =&#34; &#34 ;;
或将其从if语句中删除
$ stmt = $ conn-&gt; prepare(&#34; INSERT INTO MyGuests VALUES(?,?,?)&#34;)
这将解决您的错误
答案 2 :(得分:0)
对象是$ conn,所以如果你想把它包含在if语句中,你可以但不是必需的。 我假设MyGuests表作为id列和lastname,fisrtname,email列。您需要在SQL中指定实际列,&#34; INSERT INTO MyGuests(名字,姓氏,电子邮件)VALUES(?,?,?)&#34;
尚未定义变量$ 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();