2017-03-29 7 views
-2

Ich habe eine Tabelle mit Daten und eine Spalte mit dem Namen 'Woche'. Jedes Mal ein Benutzer Post etwas auf die Datenbank, wird dies die Spalte ‚Woche‘ hinzugefügt:Wählen Sie * aus dieser Woche

$week = Date('W'); 

So in dieser Woche eingeführt hat alles, die Zahl ‚13‘ in der Woche-Spalte. Nun möchte ich eine Abfrage, die alles von dieser Woche an und poste auf meiner Website wählen, so schrieb ich eine Variable, wie die oben und schrieb:

$sql = 'SELECT * FROM my_table WHERE week = $week'; 

Aber es Echos einen Fehler: Unknown column '$week' in 'where clause'.

Es funktioniert gut, wenn ich schreibe SELECT * FROM my_table WHERE week = 13; aber ich möchte es die aktuelle Wochennummer automatisch auswählen.

+0

Erfahren Sie mehr über vorbereitete Anweisungen – Jens

+1

Mögliche Duplikat [Wie kann ich SQL-Injection in PHP verhindern?] (Http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) – Tatranskymedved

Antwort

0

Seien Sie vorsichtig, um SQL Injection und Änderung dieser

$sql = 'SELECT * FROM my_table WHERE week = $week'; 

in

$sql = 'SELECT * FROM my_table WHERE week = '.$week; 
+0

Wie würde dies vor [SQL Injection Attack] schützen (http://stackoverflow.com/questions/60174/how-can-i-prevent -sql-injection-in-php) – RiggsFolly

+0

Dies schützt nicht vor SQL-Injection, aber das ist der Weg, wenn Sie keine vorbereiteten Anweisungen verwenden möchten – valbrux

+0

Das hat es getan! Vielen Dank! :) Ich werde mir vorbereitete Aussagen ansehen! –

1

Sie doppelte Anführungszeichen für die Zeichenfolge verwenden:

$sql = "SELECT * FROM my_table WHERE week = $week"; 

Wenn nicht, $ Woche wird nicht ersetzt.

Sie sollten vorbereitete Anweisungen verwenden, um die SQL-Injektion zu verhindern.

+0

Sie Jungs vergaß die '' Woche '$ Woche' – Gert

+2

@Gert Sieht aus wie die 'Woche' Spalte ist eine ganze Zahl, so dass die Anführungszeichen nicht notwendig sind – RiggsFolly

+0

@Gert: Nein Es sieht so aus, als wäre die Woche vom Typ int, nicht vom Typ Zeichen – Jens

4

Warum nicht einfach

$sql = "SELECT * FROM my_table WHERE week = WEEK(NOW())"; 

Nur eine Anmerkung: SELECT * ist nicht gut und sehr schlechte Praxis. Wählen Sie nur, was Sie brauchen.

0

Bitte diese verwenden, ist es sicherer gegen SQL-Injection:

$week = $mysqli->escape_string($week); 

$sql = "SELECT * FROM my_table WHERE week = '" . $week . "'"; 

$retval = $mysqli->query($sql); 

Sie müssen die mysqli-Objekt festgelegt als Verbindung zur Datenbank für diese zu arbeiten. Danach können Sie die Zeilen von $ retval holen.

0

Ihre Datumsspalte ist eine tatsächliche MySQL Datumsspalte Unter der Annahme:

SELECT * FROM my_table WHERE date > DATE_SUB(NOW(), INTERVAL 1 WEEK); 
Verwandte Themen