PHP MySQL 在非对象上调用成员函数 execute()
PHP MySQL Call to a member function execute() on a non-object
我在准备 $query
时遇到错误。
这是几行:
$query="INSERT INTO bm(title,season) VALUES(:title, :season)";
$stmt = $mysqli->prepare($query);
//$stmt->bind_param("ss", $title, $season);
$stmt->execute(array(':title' => $title, ':season' => $season));
我把bind_param
这一行放在了//
我在其他人身上看到可以解决但错误变得大致相同:
致命错误:在非对象上调用成员函数 bind_param()
所以,我想到了我的查询,但它太简单了,我看不清楚了。这让我发疯。 :-/ 我还在 $query
行之前用 echo
测试了 var $title
和 $season
来确定,就像这样:
echo $title." et ".$season;
但没有错,值没问题。这些是字符串 var。任何帮助将不胜感激。谢谢。
完整代码如下:
<?php
include("connexion.php");
// Get vars from previous form
//$id="";
$title = isset($_POST['title']) ? $_POST['title'] : "";
$season = isset($_POST['season']) ? $_POST['season'] : "";
// Testing vars
if (empty($titre) && empty($saison))
{
echo '<font color="red">Must be filled...</font>';
}
// Vars ok : could be inserted in "bm" table
else
{
// Protect - inject SQL
$title=$mysqli->real_escape_string(strip_tags($title));
$season=$mysqli->real_escape_string(strip_tags($season));
// Test
echo $title." et ".$season;
// Insert method
$query="INSERT INTO bm(title,season) VALUES(:title, :season)";
$stmt = $mysqli->prepare($query);
$stmt->bind_param("ss", $title, $season);
$stmt->execute(array(':title' => $title, ':season' => $season));
// Insert ok ?
if ($stmt) {
echo "Insert ok.";
}
else {
echo "Insert failed !";
}
}
//Close connexion
$mysqli->close();
?>
为什么不使用最常用的队列从数据库中获取数据?最常用的是使用 while 循环从数据库中获取数据吧?我认为如果您使用的是 sqlsrv,您的方法(基于您的代码)非常有效,但是 mysql 和 mysqli 具有几乎相同的语法,这与 sqlsrv 不同,后者使用参数传递数据,只是我的意见 :D
如果您参考有关 PHP MYSQLI (http://php.net/manual/en/mysqli.prepare.php) 的文档,您会注意到在准备过程中发生错误时会返回 FALSE。
mysqli_prepare() returns a statement object or FALSE if an error occurred.
调用不是来自 mysqli_stmt 对象,而是来自 FALSE 布尔值。
我的假设是,如果您传入正确的变量,则错误发生在您的连接字符串中。需要更多代码才能进一步排除故障。
尝试按如下方式更改数据库调用:
$query="INSERT INTO bm(title,season) VALUES(?, ?)";
$stmt = $mysqli->prepare($query);
//could be false if prepared statemant is somehow wrong
if ($stmt === false){
echo "Insert failed !";
}
else{
//bind the params to the variables
$stmt->bind_param("ss", $title, $season);
//no parameters allowed for execute method according to the doc
$success = $stmt->execute();
//check for $success if true/false
}
我在准备 $query
时遇到错误。
这是几行:
$query="INSERT INTO bm(title,season) VALUES(:title, :season)";
$stmt = $mysqli->prepare($query);
//$stmt->bind_param("ss", $title, $season);
$stmt->execute(array(':title' => $title, ':season' => $season));
我把bind_param
这一行放在了//
我在其他人身上看到可以解决但错误变得大致相同:
致命错误:在非对象上调用成员函数 bind_param()
所以,我想到了我的查询,但它太简单了,我看不清楚了。这让我发疯。 :-/ 我还在 $query
行之前用 echo
测试了 var $title
和 $season
来确定,就像这样:
echo $title." et ".$season;
但没有错,值没问题。这些是字符串 var。任何帮助将不胜感激。谢谢。
完整代码如下:
<?php
include("connexion.php");
// Get vars from previous form
//$id="";
$title = isset($_POST['title']) ? $_POST['title'] : "";
$season = isset($_POST['season']) ? $_POST['season'] : "";
// Testing vars
if (empty($titre) && empty($saison))
{
echo '<font color="red">Must be filled...</font>';
}
// Vars ok : could be inserted in "bm" table
else
{
// Protect - inject SQL
$title=$mysqli->real_escape_string(strip_tags($title));
$season=$mysqli->real_escape_string(strip_tags($season));
// Test
echo $title." et ".$season;
// Insert method
$query="INSERT INTO bm(title,season) VALUES(:title, :season)";
$stmt = $mysqli->prepare($query);
$stmt->bind_param("ss", $title, $season);
$stmt->execute(array(':title' => $title, ':season' => $season));
// Insert ok ?
if ($stmt) {
echo "Insert ok.";
}
else {
echo "Insert failed !";
}
}
//Close connexion
$mysqli->close();
?>
为什么不使用最常用的队列从数据库中获取数据?最常用的是使用 while 循环从数据库中获取数据吧?我认为如果您使用的是 sqlsrv,您的方法(基于您的代码)非常有效,但是 mysql 和 mysqli 具有几乎相同的语法,这与 sqlsrv 不同,后者使用参数传递数据,只是我的意见 :D
如果您参考有关 PHP MYSQLI (http://php.net/manual/en/mysqli.prepare.php) 的文档,您会注意到在准备过程中发生错误时会返回 FALSE。
mysqli_prepare() returns a statement object or FALSE if an error occurred.
调用不是来自 mysqli_stmt 对象,而是来自 FALSE 布尔值。
我的假设是,如果您传入正确的变量,则错误发生在您的连接字符串中。需要更多代码才能进一步排除故障。
尝试按如下方式更改数据库调用:
$query="INSERT INTO bm(title,season) VALUES(?, ?)";
$stmt = $mysqli->prepare($query);
//could be false if prepared statemant is somehow wrong
if ($stmt === false){
echo "Insert failed !";
}
else{
//bind the params to the variables
$stmt->bind_param("ss", $title, $season);
//no parameters allowed for execute method according to the doc
$success = $stmt->execute();
//check for $success if true/false
}