【问题标题】:PHP MySQL Call to a member function execute() on a non-objectPHP MySQL调用非对象上的成员函数execute()
【发布时间】:2015-09-19 10:09:42
【问题描述】:

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

【问题讨论】:

    标签: php mysql mysqli insert


    【解决方案1】:

    尝试如下更改您的数据库调用:

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

    【讨论】:

    • 它就像一个魅力。但太糟糕了,我不能使用 :var / $var 提示。如果我需要table bm 中的所有变量,修改我的查询会更容易。也许与 PDO ?但是代码可能会从头开始重写......从我读到的关于 PDO 与 Mysqli 的内容:-/
    【解决方案2】:

    为什么不使用最常用的队列从数据库中获取数据?最常用的是使用while循环从数据库中获取数据,对吗?我认为如果您使用 sqlsrv,您的方法(基于您的代码)非常有效,但是 mysql 和 mysqli 的语法几乎与 sqlsrv 相同,后者使用参数传递数据,只是我的看法:D

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

      • 我放了完整的代码。我从一个 php 表单文件中得到了 vars。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-19
      • 2016-01-01
      • 2016-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多