PHP/MySQLi - 致命错误:在非对象上调用成员函数 mysqli_query()

PHP/MySQLi - Fatal error: Call to a member function mysqli_query() on a non-object

提问人:Venelin 提问时间:12/20/2015 最后编辑:TwoStrawsVenelin 更新时间:12/20/2015 访问量:2508

问:

这是我的代码:

require "../include/functions.php";

error_reporting(E_ALL);
ini_set('display_errors', '1'); 

ConnectWithMySQLiDatabase();

$Cat = addslashes($_POST["Category"]);

$v = $conn->mysqli_query($conn,"SELECT * FROM `categories` WHERE `id`=$Cat");
$vrowi = mysqli_fetch_array($v, MYSQLI_ASSOC);

$url = $conn->real_escape_string($vrowi['Link']);

这是我所拥有的:functions.php

function ConnectWithMySQLiDatabase() {

     global $dbhost, $dbuser, $dbpass, $database, $HTTP_SERVER_VARS;

    $conn = new mysqli($dbhost, $dbuser, $dbpass, $database);
    // Check connection
    if (mysqli_connect_errno())
      {
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
      }


    $conn->set_charset("utf8");

    global $conn;

}

变量设置正确。$dbhost, $dbuser, $dbpass, $database,

当我尝试执行此mysqli_query时,我收到以下错误:

<b>Fatal error</b>:  Call to a member function mysqli_query() on a non-object in <b>/fetch_category_products.php</b> on line <b>19</b><br />

第 19 行是:

$v = $conn->mysqli_query($conn,"SELECT * FROM `categories` WHERE `id`=$Cat");

你能告诉我我的错误在哪里,我该如何解决吗?

提前致谢!

PHP MySQLI

评论

0赞 Quentin 12/20/2015
危险:您容易受到 SQL 注入攻击,您需要保护自己免受这些攻击。(这是不安全的,甚至文档也这么说)addslashesaddslashes
0赞 Venelin 12/20/2015
我必须用什么来替换它? ?mysqli_real_escape_string
0赞 TwoStraws 12/20/2015
@TonyStark 请考虑使用 PDO 进行数据库工作。
0赞 Venelin 12/20/2015
所以使用起来不安全,使用起来更好吗?mysqlipdo
0赞 Quentin 12/20/2015
@TonyStark — 尝试单击评论中的链接。

答:

3赞 TwoStraws 12/20/2015 #1

出现该错误是因为数据库连接不起作用 - 从字面上看,这意味着值 is 不是对象,这可能意味着它未设置或设置为,因为连接失败。更改,使其最后一行不是 而是 。$connfalseConnectWithMySQLiDatabase()global $conn;return $conn;

现在将调用该函数的方式从 更改为 be,我相信问题会消失。ConnectWithMySQLiDatabase();$conn = ConnectWithMySQLiDatabase();

OP在这次改动后发布了更新,迷茫变得更加明显:现在他们有了连接,他们应该就用,像这样:MySQLiquery

$v = $conn->query("SELECT * FROM `categories` WHERE `id`=$Cat");

评论

0赞 Venelin 12/20/2015
var_dump给了我这个:pastebin.com/Uf7HgUwB,我仍然收到错误 在这条线上 categories' WHERE =$Cat“);' 有什么建议吗?Fatal error: Call to undefined method mysqli::mysqli_query()$v = $conn->mysqli_query($conn,"SELECT * FROM id
0赞 TwoStraws 12/20/2015
谢谢!屏幕截图非常有帮助。查看我更新的答案。
0赞 Venelin 12/20/2015
现在我收到这个错误:在同一行上。<b>Warning</b>: mysqli::query() expects parameter 1 to be string, object given in
0赞 Venelin 12/20/2015
现在一切正常。非常感谢您的努力。我还有一个关于安全的问题。而不是使用这个就足够了吗?addslashes$conn->real_escape_string()
0赞 TwoStraws 12/20/2015
不要使用 .使用提供了更高的安全性,但本身并不是一个完整的解决方案。将 PDO 与绑定参数 + 输入过滤结合使用,即可获得所需的结果。addslashes()real_escape_string()