PHP MySQL Abfrage NULL zurückgeben
Ich habe eine MySQL Tabelle, die so aussieht:
index | tag | posts
-------------------------
1 | cats | 9,10
2 | a cat | 9,10
3 | kitty | 9,10
4 | meow | 9,10
Ich versuche einfach nur wieder die Zeile, die mit a search query.
Ich übergeben die parameter für die Suche mit einem einfachen ?search=cats
.
Dies ist das PHP, dass ich mit:
$search = $_GET['search'];
$query = mysql_query("SELECT * FROM tags WHERE tag = '$search'");
echo(mysql_num_rows($query));
$result = mysql_fetch_array($query);
$print = $result['posts'];
echo($print);
Jedoch die mysql_num_rows($query)
druckt 0 und die $print
NULL zurück. Kann ich dies mit ($print == "")
es wird zu TRUE ausgewertet, und der mysql_num_rows($query)
gibt 4.
Ich habe versucht, die Suchanfrage zu etwas, dass nicht in der Tabelle und es umgestimmt, FALSE, wie erwartet. Ich habe auch versucht, das entfernen der WHERE tag = '$search'
und es gibt die Tabelle, wie es sein sollte.
Gibt es etwas, was ich im Blick?
Bearbeiten
Nahm jeden Tipp und den code, den ich jetzt verwende ist:
$search = mysql_real_escape_string($_GET['search']);
var_dump($search); //prints string(4) "cats" just like it should
$queryText = "SELECT * FROM tags WHERE tag = '%".$search."%'";
echo($queryText); //SELECT * FROM tags WHERE tag = '%cats%'
$query = mysql_query($queryText) or die(mysql_error()); //no error
$rows = mysql_num_rows($query); //this returns 0 and I know it should match 1 row
echo('rows: '.$rows);
$result = mysql_fetch_array($query);
$print = $result['posts'];
echo($print); //empty
Immer noch das gleiche problem. Die mysql_query
ist wieder NULL statt der Zeile oder FALSE, wenn es nicht mit.
(in Zukunft werde ich das mysqli
- API, aber ich würde gerne Finnisch, dieses Projekt in mysql
. vielen Dank für Ihre Anregungen und Ratschläge)
- 2 Dinge: 1. echo nach $Suche = $_GET['Suche']; dass in der Tat mit dem Suchbegriff gefüllt war. 2. ändern Sie die Abfrage $Abfrage = mysql_query("SELECT * FROM tags WHERE tag = '$Suche'") or die(mysql_error()); und sagen Sie uns, was ist der output.
- Herzlich willkommen auf Stack Overflow! Bitte verwenden Sie nicht
mysql_*
Funktionen im neuen code. Sie werden nicht mehr gepflegt und sind offiziell deprecated. Siehe die red box? Erfahren Sie mehr über prepared statements und PDO oder MySQLi - diesem Artikel wird Ihnen helfen, entscheiden, welche. Wenn Sie PDO, hier ist ein gutes tutorial. - Stellen Sie sicher, Sie wissen GENAU, was an den MySQL server gesendet.
$queryText = "SELECT * FROM tags WHERE tag = '$search'"; print($queryText);
Auch versuchen, indemor die(mysql_error);
auf der gleichen Linie wie diemysql_query()
. - denken Sie daran die Funktion
mysql_real_escape_string()
- Danke, ich werde ihn in Erinnerung behalten.
- Ich überprüfte
$_GET['search']
und es war in der Tat, was ich wollte, es zu sein. Ich habe auchor die(mysql_error())
, aber es wurden keine Fehler zurückgegeben. vielen Dank für die Hilfe.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok also nach dem Hinweis auf die oben Bearbeiten Sie gemacht, hier ist die Lösung
Verwenden Sie "WIE" anstelle von "=" als Platzhalter "%"
Also deine Abfrage jetzt sollte
[I erstellt, die genau die gleiche db auf meinem lokalen system und lief den gleichen code, den Sie gab, Nachdem Sie die oben genannten änderungen, Es läuft wie erwartet]
urldecode()
Funktion auf es. Sollte ich es verwenden oder nicht?mysqli
. Vielen Dank für Ihre Hilfe!Versuchen, diesen code jetzt.
Denken Sie daran,, wenn Sie Debuggen möchten etwas in PHP der schnellere Weg ist var_dump nicht echo. Auch sollten Sie vermeiden, mysql_api, weil Sie veraltet sind, verwenden Sie PDO statt PDO auf PHP.net
$_GET['search']
zum ersten mal und es hat in der Tat enthalten, was ich wollte. Vielen Dank für die Anregungen!Hinweis:
Sehr dangerouse: Es ermöglicht sql incersion code auf Ihre Datenbank. Sie müssen immer entkommen alles, was man von der client.
Note2:
mysql_query ist veraltet, benutze mysqli anstatt 😉
Antwort:
Wenn Sie nicht Antworten, werden Sie wahrscheinlich einen Fehler in einem anderen Teil.
Versuchen
Können Sie auch "tag like '%Katzen%'" wenn Sie möchten, eine flexiblere Suche.
'%cats%'
undmysql_real_escape_string()
.Wenn Sie entfernen die tage, WO = '$suchen', es kann nicht der Tabelle wieder, wie es sein sollte, weil Ihr mysql_fetch_array nicht in einer while-Schleife... aber davon abgesehen...
WHERE tage = '$search'
ich verwendetwhile($result[] = mysql_fetch_array($query))
um es zu überprüfen. Vielen Dank für die'%".$var."%'
Tipp!