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

时间:2015-07-02 03:24:56

标签: 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));

我在bind_param中添加//行 我看到其他人可以解决但错误变得大致相同:

致命错误:在非对象上调用成员函数bind_param()

所以,我想到了我的疑问,但它很简单,我再也看不清了。它让我疯了。 : - /我还在$title行之前用$season测试了变量echo$query以确定,如下所示:

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();
?>

3 个答案:

答案 0 :(得分:0)

为什么不使用最常用的排队来从数据库中获取数据?最常用的是使用while循环从数据库中获取数据吗?我认为你的方法(基于你的代码)完全有效,如果你使用sqlsrv,但mysql和mysqli几乎相同的语法不同于sqlsrv,它使用params传递数据,只是我的意见:D

答案 1 :(得分:0)

如果您参考PHP MYSQLI(http://php.net/manual/en/mysqli.prepare.php)上的文档,您会注意到在prepare中发生错误时会返回FALSE。

  

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

它不是来自mysqli_stmt对象的调用,而是来自FALSE布尔值 我的假设是,如果传入适当的变量,则会在连接字符串中发生错误。需要更多代码才能进一步排除故障。

答案 2 :(得分:0)

尝试更改数据库调用,如下所示:

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