【问题标题】:php bind parameters on SQL statement is not workingSQL语句上的php绑定参数不起作用
【发布时间】:2017-05-06 03:25:55
【问题描述】:

我正在尝试在 php 上进行选择,但在将绑定参数传递给标准 sql 语句时遇到问题。我已经为此失去了一整天,我找不到任何解决方案。我有一个sql语句和一个参数(这部分是不断变化的)

这里有我的 sql 语句和执行:

$mysqli=getDB();
    $stmt = $mysqli->prepare('SELECT nom from noms where id=?'); // cambiar select 
    $sql->bind_param($id);
    $result = $mysqli->query($sql);
    $results = array();
    while($row = mysqli_fetch_array($result)){
        $results[] = array( // modificar el que passa dintre del bucle
            'nom' => $row['nom']
         );
    }

   echo json_encode($results);

这是我连接数据库的方式 (getDB()):

function getDB() {
    // Credencials
    $servername = "server";
    $username = "user";
    $password = "pswwd";
    $dbname = "database";


    $mysqli = new mysqli($servername, $username, $password, $dbname);
    if ($mysqli->connect_errno) {
        echo "Error al connectar: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
    }

    return $mysqli;

}

这实际上是一个网络服务功能,当我调用它时,我得到一个 500 消息错误。我需要运行更改 $id 值的语句(此参数来自外部)。我只从 JS 控制台收到 500 错误状态,但我没有看到任何错误消息。

编辑:

我对语句和执行做了一些改动:

$mysqli=getDB();
        $stmt = $mysqli->prepare('SELECT nom from noms where id=?'); // cambiar select 
        $stmt ->bind_param($id);
        $result = $mysqli->query($stmt );
        $results = array();
        while($row = mysqli_fetch_array($result)){
            $results[] = array( // modificar el que passa dintre del bucle
                'nom' => $row['nom']
             );
        }

       echo json_encode($results);

日志仍然显示相同的消息: PHP 致命错误:在非对象上调用成员函数 bind_param()

【问题讨论】:

    标签: php mysql database web-services


    【解决方案1】:

    RTM:http://php.net/manual/en/mysqli-stmt.bind-param.php

    语法是

    $stmt->bind_param('types', $var1, $var2, etc....)
    

    您只提供了$var1 部分,而忘记了类型。你需要告诉mysqli你的参数是什么类型,例如

    $stmt->bind_param('i', $id);
                      ^^^---missing in your version
    

    请注意,每当您获得 500 分时,您立即查看您的网络服务器的错误日志以了解实际详细信息。您在浏览器中看到的内容故意含糊其辞,因为 500 错误可能会泄露不应公开的核心/配置详细信息。

    【讨论】:

    • 不工作,但我会先检查日志。谢谢!
    • 我收到此消息:PHP 致命错误:在非对象上调用成员函数 bind_param()。那么,我没有正确使用 bind_param() 吗?
    • 这意味着您的准备调用失败。例如您需要调试备份调用链。
    猜你喜欢
    • 2020-09-05
    • 2015-12-31
    • 2012-03-23
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多