PHP MySQL调用非对象上的成员函数execute()

PHP MySQL调用非对象上的成员函数execute(),php,mysql,mysqli,insert,Php,Mysql,Mysqli,Insert,我在准备$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)); 我在/ 我看

我在准备
$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()

所以,我想到了我的问题,但它太简单了,我看不清楚了。我快发疯了我还测试了var
$title
$seasure
,并在
$query
行之前使用了
echo
,如下所示:

echo $title." et ".$season;
但没有什么不对,价值观是正确的。这些是字符串。任何帮助都将不胜感激。谢谢


以下是完整的代码:

<?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几乎相同,后者使用参数传递数据,我的意见是:为什么不使用最常用的查询从数据库中获取数据?最常用的方法是使用while循环从数据库中获取数据,对吗?我认为如果您使用sqlsrv,您的方法(基于您的代码)会非常有效,但是mysql和mysqli的语法与sqlsrv几乎相同,后者使用参数传递数据,我的观点是:D

如果您参考PHP mysqli()上的文档,您会注意到在准备过程中发生错误时返回FALSE

mysqli_prepare()返回语句对象,如果发生错误,则返回FALSE

调用不是来自mysqli_stmt对象,而是来自假布尔值。

我的假设是,如果您传入正确的变量,那么错误会发生在连接字符串中。需要更多代码来进一步排除故障

如果您参考PHP MYSQLI()上的文档,您会注意到当prepare中发生错误时返回FALSE

mysqli_prepare()返回语句对象,如果发生错误,则返回FALSE

调用不是来自mysqli_stmt对象,而是来自假布尔值。

我的假设是,如果您传入正确的变量,那么错误会发生在连接字符串中。需要更多代码来进一步排除故障

尝试按如下方式更改数据库调用:

$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="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
}

我把完整的代码。我从一个php表单文件中得到了变量。我把完整的代码。我从一个php表单文件中得到了变量。它工作起来很有魅力。但太糟糕了,我不能使用
:var
/
$var
提示。如果我需要
表bm
中的所有变量,那么修改查询就更容易了。也许是PDO?但是代码可以从头开始重新编写。。。从我读到的关于PDO和Mysqli的内容来看:-/它就像一个魅力。但太糟糕了,我不能使用
:var
/
$var
提示。如果我需要
表bm
中的所有变量,那么修改查询就更容易了。也许是PDO?但是代码可以从头开始重新编写。。。从我读到的关于PDO和Mysqli的内容来看:-/