2013-03-28 13 views
9

Ich habe ein Problem mit dieser einfachen SQL-Abfrage mit:PHP String-Variable in WHERE-Klausel MySQL

<?php 
require_once('../../Connections/tohoshows.php'); 

$show ='gothaf'; 

mysql_select_db($database_tohoshows, $tohoshows); 
$query_getShows = "SELECT * FROM toho_shows WHERE toho_shows.show =' ". $show. " '"; 
$getShows = mysql_query($query_getShows, $tohoshows) or die(mysql_error()); 
$row_getShows = mysql_fetch_assoc($getShows); 
$totalRows_getShows = mysql_num_rows($getShows); 

mysql_free_result($getShows); 
?> 

Wenn ich die Zeichenfolge direkt in der WHERE-Klausel verwenden, wie diese

$query_getShows = "SELECT * FROM toho_shows WHERE toho_shows.show ='gothaf'"; 

ich ein Ergebnis. Wenn ich stattdessen die Variable verwende, bekomme ich keine Daten! Ich bin ein Neuling und ich kann nicht herausfinden, was ich falsch mache. Jede Hilfe wäre willkommen. Vielen Dank!

+2

[** Bitte verwenden Sie nicht 'mysql_ *' Funktionen in neuen Code **] (http://bit.ly/phpmsql). Sie werden nicht mehr gewartet [und sind offiziell veraltet] (http://j.mp/XqV7Lp). Siehe die [** rote Box **] (http://j.mp/Te9zIL)? Erfahren Sie mehr über [* prepared statements *] (http://j.mp/T9hLWi) und verwenden Sie [PDO] (http://php.net/pdo) oder [MySQLi] (http://php.net/) mysqli) - [dieser Artikel] (http://j.mp/QEx8IB) wird Ihnen helfen zu entscheiden, welche. – Kermit

Antwort

17

Sie kein Datum bekommen, weil Sie betwee Anführungszeichen zusätzlichen Platz haben,

$query_getShows = "SELECT * FROM toho_shows WHERE toho_shows.show =' ". $show. " '"; 
                    ^HERE ^

, die dann in

SELECT * FROM toho_shows WHERE toho_shows.show =' gothaf ' 
analysiert wird es

entfernen und es wird

$query_getShows = "SELECT * FROM toho_shows WHERE toho_shows.show ='". $show. "'"; 

arbeiten

Als eine Nebenbemerkung, die q Uery ist anfällig mit SQL Injection, wenn der Wert (s) der Variablen von außen kam. Bitte sehen Sie sich den folgenden Artikel an, um zu erfahren, wie Sie davon abhalten können. Durch Verwendung von PreparedStatements können Sie die Verwendung von einfachen Anführungszeichen um Werte loswerden.

+0

Vielen Dank für Ihre Antwort! Ich habe es auch ohne Leerzeichen dazwischen versucht, bekomme aber trotzdem keine Daten. –

+0

posten Sie das Ergebnis dieses 'echo $ query_getShows;' –

+0

Sie sollten nicht einmal in Betracht ziehen, diesen Ansatz zu verwenden, @Akis, es ist wirklich einfach, vorbereitete Anweisungen zu verwenden, und doch ist es systemkritisch. – Jonast92