2015-12-20 9 views
5

Oto mój kod:PHP/MySQLi - Fatal error: Zadzwoń do mysqli_query funkcji członka() na 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']); 

Oto co mam w 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; 

} 

Zmienne $dbhost, $dbuser, $dbpass, $database, są ustawione poprawnie.

Kiedy próbuję wykonać to mysqli_query otrzymuję następujący błąd:

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

Linia 19 jest:

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

Czy możesz mi powiedzieć, gdzie jest mój błąd i jak można to naprawić ?

Z góry dziękuję!

+0

** Niebezpieczeństwo **: Jesteś * * narażone na [ataki SQL injection] (http://bobby-tables.com/) **, które musisz [bronić] (http://stackoverflow.com/questions/60174/best-way-to-prevent- sql-injection-in-php). ('addslashes' nie jest do tego bezpieczny, nawet dokumentacja dla' addslashes' mówi tak) – Quentin

+0

Co muszę zastąpić? 'mysqli_real_escape_string'? –

+0

@TonyStark Proszę rozważyć użycie PDO do pracy z bazą danych. – TwoStraws

Odpowiedz

3

Błąd ten powstaje, ponieważ połączenie z bazą danych nie działa - dosłownie oznacza, że ​​wartość $conn nie jest obiektem, co prawdopodobnie oznacza, że ​​nie została ustawiona lub ustawiona na false, ponieważ połączenie nie powiodło się. Zmień ConnectWithMySQLiDatabase(), aby ostatnia linia nie była global $conn;, ale return $conn;.

Teraz zmień sposób wywoływania tej funkcji z ConnectWithMySQLiDatabase(); na $conn = ConnectWithMySQLiDatabase(); i uważam, że problem zniknie.

OP zaktualizował po tej zmianie, a zamieszanie stały się bardziej jasne: teraz mają MySQLi połączenie, należy po prostu użyć query, tak:

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

var_dump daje mi to : http://pastebin.com/Uf7HgUwB i nadal pojawia się błąd 'Błąd krytyczny: wywołanie niezdefiniowanej metody mysqli :: mysqli_query()' w tym wierszu '$ v = $ conn-> mysqli_query ($ conn," SELECT * FROM " 'categories' WHERE' id' = $ Cat ");' Wszelkie porady? –

+0

Dziękuję! Zrzut ekranu był bardzo pomocny. Zobacz moją zaktualizowaną odpowiedź. – TwoStraws

+0

Teraz otrzymuję ten błąd: 'Ostrzeżenie: mysqli :: query() oczekuje, że parametr 1 będzie łańcuchem, obiektem podanym w tym samym wierszu. –

Powiązane problemy