PHP bind_param无效

时间:2014-10-25 21:11:07

标签: php mysql prepare sqlbindparameter

我试图通过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) ;

3 个答案:

答案 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();