2016-04-21 6 views
0

Ich versuche, die mysqli_real_escape_string() - Funktion in einer Abfrage zu verwenden.wie man mysqli_real_escape_string() Funktion in einer Abfrage richtig benutzt

Dies ist meine aktuellen Code:

$Product_Id = substr($prod_name, 14, (strlen($prod_name)-14)); 
$get_query = "SELECT P FROM Product WHERE Product_Id =' .mysql_real_escape_string((int)$Product_Id))"; 

dies nicht funktioniert, es wird folgender Fehler:

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in

Aber wenn ich die mysqli_real_escape_string Funktion mein Code funktioniert entfernen.

Also was ist der beste Weg, dies zu tun, wie ich versuche, sql-Injektion zu stoppen.

+0

[Little Bobby] (http://bobby-tables.com/) sagt [Ihr Skript ist für SQL Injection Attacks gefährdet.] (Http://stackoverflow.com/questions/60174/how-can-i -prevent-sql-injection-in-php). Sogar [die Zeichenfolge zu entkommen] (http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string) ist nicht sicher! Erfahren Sie mehr über [vorbereitete] (http://en.wikipedia.org/wiki/Prepared_statement) Anweisungen für [MySQLi] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php). –

+0

Bitte lesen Sie [Strings] (http://php.net/string). Deine Zitate sind falsch. –

+0

Sie müssen den Unterschied zwischen SQL und PHP lernen, da sie verschiedene Sprachen sind. mysql_real_escape_string() 'ist eine PHP-Funktion, keine SQL-Funktion. –

Antwort

1

I am trying to use the mysqli_real_escape_string() Function in a query.

Aber du bist eigentlich nicht. In Ihrer Anfrage verwenden Sie mysql_real_escape_string().

Plus diese Abfrage ist fehlerhaft, so würde es sowieso nicht funktionieren. Deine Zitate sind an den falschen Stellen. Versuchen Sie Folgendes:

$get_query = "SELECT P FROM Product WHERE Product_Id = " . (int) mysqli_real_escape_string($Product_Id); 

Da $Product_Id wird ein integer gegossen wird, werden Sie nicht einpacken müssen, um es in Anführungszeichen in der Abfrage (unter der Annahme Product_Id Spalte ist integer-basierte, da Sie Gießen es eine Ganzzahl, ich nehme an, es ist).

Und die Art Guss (int) aus dem Argument bewegt tatsächlich innerhalb mysqli_real_escape_string() zu vor der Funktion ist das, was Sie suchen. Es ist zwar nicht notwendig, $Product_Id zu diesem Zeitpunkt zu übertragen, da es redundant ist und tatsächlich mehr Probleme aufwerfen könnte, als es unter bestimmten Umständen lösen würde (zB angenommen, $Product_Id wurde irgendwie auf einen String gesetzt [$Product_Id = 'Marcus'], und Sie werfen es dann auf ein Ganzzahl: (int) $Product_Id würde 0 zurückgeben, aber kein Fehler). Es würde auch eine negative ganze Zahl durchgehen, von der ich annehme, dass du keine negativen $Product_Id hast, oder? Es gibt viel bessere Möglichkeiten, Variablentypen zu erkennen und zu verarbeiten, bevor sie an eine Abfrage gesendet werden. Aber wir können uns ein anderes Mal damit beschäftigen.

In Ihrer Abfrage hatten Sie eine fehlerhafte Single-Quote (WHERE Product_Id ='), die einen Parsing-Fehler verursacht.

+0

Danke, dafür. Ich bin ein Neuling nach einem Tutorial – Monroe

Verwandte Themen