【问题标题】:Issue with mysqli in PHP Warning: mysqli_stmt_prepare() expects parameter 1PHP 警告中的 mysqli 问题:mysqli_stmt_prepare() 需要参数 1
【发布时间】:2020-06-15 10:18:10
【问题描述】:

我一直在查看这段代码,但无法弄清楚问题出在哪里。

我一般是编码新手,但对CRUDSQL 尤其陌生。我想在这里创建一个准备好的语句来使用变量而不是精确值。我不明白问题出在哪里

我有一个 Databasetools.php

<?php
class DatabaseTools
{
    //private $user = $_SESSION['userId']; // these get called when the object gets created
    //private $userEmail = $_SESSION['emailUser'];

    public function __construct($Name)
    {
        $servername = "localhost";
        $dBUsername = "root";
        $dBPassword = "supersecretpassword";
        $dbPort = "3306";

        $this->name = $Name;
        $conn = mysqli_connect($servername, $dBUsername, $dBPassword, $this->name, $dbPort);
        $stmt = mysqli_stmt_init($conn);
        if(!$conn)
        {
            die("connection faild: ".mysqli_connect_error()); 
        }
    }

    public function lookup($dBName, $Row, $Column)
    {
        //$sql = "SELECT ".$Column." FROM ".$dBName." WHERE ".$Row.";";
        $sql = "SELECT ? FROM ? WHERE ?;";
        if(!mysqli_stmt_prepare($stmt, $sql))
        {
            echo "False";
        }
        else 
        {
            mysqli_stmt_bind_param($stmt, "sss", $column, $dBName, $Row);
            mysqli_stmt_execute($stmt);
            $result = mysli_stmt_get_result($stmt);
            echo $result;
        }
        // try to connect to the database
    }
    public function setCell($Database, $Row, $Column)
    {

    }

    public function disconnect($dBName)
    {

    }
    public function echotest()
    {

    }
}
?>

我正在使用一个页面来检查代码是否工作

<?php
require "Model/php/databaseTools.php";

$loginData = new databaseTools("loginsystem");
$loginData->lookup("loginsystem","*","*");
?>

非常感谢您能指出我的写作方向。

【问题讨论】:

  • 您只能参数化值,不能参数化列、表、函数等。请将完整错误添加到问题中并显示它引用的行。
  • 您也不能对任何 SQL 语法进行参数化。 ...WHERE * 也不是有效的语法。
  • 警告:mysqli_stmt_prepare() 期望参数 1 为 mysqli_stmt,在第 27 行的 databaseTools.php 中给出的 null 错误

标签: php mysql sql database mysqli


【解决方案1】:

您确定在查找函数中有 $stmt 值吗?

尝试将其添加为参数之一,如下所示:

public function lookup($dBName, $stmt, $Row, $Column)

然后也用$stmt参数调用它:

$loginData->lookup("loginsystem", <stmt> ,"*","*");

【讨论】:

  • 我将语句值作为构造函数。这不起作用吗?我应该把它作为构造函数之外的公共变量吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多