2015-12-20 14 views
5

Đây là mã của tôi:PHP/MySQLi - Fatal error: Call to một hàm thành viên mysqli_query() trên một tổ chức phi vật thể

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']); 

Dưới đây là những gì tôi có trong 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; 

} 

Các biến số $dbhost, $dbuser, $dbpass, $database, được đặt chính xác.

Khi tôi cố gắng để thực hiện mysqli_query này tôi nhận được lỗi sau:

<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 /> 

Dòng 19 là:

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

bạn có thể vui lòng cho tôi biết đâu là sai lầm của tôi và làm thế nào tôi có thể sửa chữa nó ?

Cảm ơn trước!

+0

** Danger **: Bạn đang * * dễ bị tấn công [tấn công SQL injection] (http://bobby-tables.com/) ** mà bạn cần [bảo vệ] (http://stackoverflow.com/questions/60174/best-way-to-prevent- sql-injection-in-php) của bạn từ. ('addslashes' không an toàn cho điều này, ngay cả tài liệu cho' addslashes' nói như vậy) – Quentin

+0

Với những gì tôi phải thay thế nó? 'mysqli_real_escape_string'? –

+0

@TonyStark Vui lòng xem xét sử dụng PDO cho công việc cơ sở dữ liệu của bạn. – TwoStraws

Trả lời

3

Lỗi đó phát sinh do kết nối cơ sở dữ liệu không hoạt động - nghĩa là giá trị $conn không phải là một đối tượng, điều này có nghĩa là không được đặt hoặc đặt thành false do kết nối không thành công. Thay đổi ConnectWithMySQLiDatabase() để dòng cuối cùng của nó không phải là global $conn; nhưng return $conn;.

Bây giờ hãy thay đổi cách bạn gọi chức năng đó từ ConnectWithMySQLiDatabase(); thành $conn = ConnectWithMySQLiDatabase(); và tôi tin rằng sự cố sẽ biến mất.

OP posted an update sau khi thay đổi này, và sự nhầm lẫn trở nên rõ ràng hơn: bây giờ họ có một kết nối MySQLi, họ chỉ nên sử dụng query, như thế này:

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

var_dump cho tôi điều này : http://pastebin.com/Uf7HgUwB và tôi vẫn nhận được lỗi 'Lỗi nghiêm trọng: Gọi tới phương thức chưa xác định mysqli :: mysqli_query()' trên dòng này '$ v = $ conn-> mysqli_query ($ conn," SELECT * FROM 'category' WHERE' id' = $ Cat ");" Bạn có lời khuyên nào không? –

+0

Cảm ơn bạn! Ảnh chụp màn hình rất hữu ích. Xem câu trả lời cập nhật của tôi. – TwoStraws

+0

Bây giờ tôi nhận được lỗi này: 'Cảnh báo: mysqli :: query() hy vọng tham số 1 là chuỗi, đối tượng được đưa ra trong' trên cùng một dòng. –

Các vấn đề liên quan