提问人:Venelin 提问时间:12/20/2015 最后编辑:TwoStrawsVenelin 更新时间:12/20/2015 访问量:2508
PHP/MySQLi - 致命错误:在非对象上调用成员函数 mysqli_query()
PHP/MySQLi - Fatal error: Call to a member function mysqli_query() on a non-object
问:
这是我的代码:
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");
你能告诉我我的错误在哪里,我该如何解决吗?
提前致谢!
答:
3赞
TwoStraws
12/20/2015
#1
出现该错误是因为数据库连接不起作用 - 从字面上看,这意味着值 is 不是对象,这可能意味着它未设置或设置为,因为连接失败。更改,使其最后一行不是 而是 。$conn
false
ConnectWithMySQLiDatabase()
global $conn;
return $conn;
现在将调用该函数的方式从 更改为 be,我相信问题会消失。ConnectWithMySQLiDatabase();
$conn = ConnectWithMySQLiDatabase();
OP在这次改动后发布了更新,迷茫变得更加明显:现在他们有了连接,他们应该就用,像这样:MySQLi
query
$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()
评论
addslashes
addslashes
mysqli_real_escape_string
mysqli
pdo