PHP 7: Wieso gibt query() hier false zurück?
Yadgar
- mysql
- php
Hi(gh)!
Und wieder mal versuche ich mich als Datenbankprogrammierer... diesmal geht es um ein Stichwortverzeichnis für diverse private Tagebücher. Jedem Stichwort ist eine oder mehrere Datumsangaben sowie ein oder mehrere Kategorien zugeordnet... bei der Programmierung der Eingabemaske für die Relationstabelle STICHWORT_DATUM tritt ein mir unerklärlicher Fehler auf, das Ergebnis einer SELECT-Abfrage (drittletzte Zeile) ist false - gebe ich dagegen die gleiche Query in phpmyadmin ein, wird mir ein korrektes Ergebnis angezeigt! Warum?
$sql = "SELECT stichwort FROM STICHWOERTER";
$res = $db->query($sql);
qcheck($res, $db);
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="POST">
Stichwort:<br>
<select name="stichwort">
<?php
$zusatz="";
while ($zeile = $res->fetch_array())
{
if (!empty($_GET["edit"]) && $line == $_GET["edit"])
$zusatz = " selected";
echo "<option".$zusatz.">".$zeile[0]."</option>\n";
}
?>
</select><br>
Datum<br>
<input type="text" name="datum" size="10"><br>
<input type="submit" value="Abschicken">
</form>
<?php
if (!empty($entry))
file_put_contents($datei1, $_GET["edit"]);
if (isset($_POST["stichwort"]) && !empty($_POST["stichwort"]) && isset($_POST["datum"]) && !empty($_POST["datum"]))
{
$inhalt1 = file_get_contents($datei1);
// var_dump($inhalt1);
$sql = "SELECT nr, stichwort FROM STICHWOERTER WHERE stichwort = ".$_POST['stichwort'];
$res = $db->query($sql);
var_dump($res); // false!
Hallo
Und wieder mal versuche ich mich als Datenbankprogrammierer... diesmal geht es um ein Stichwortverzeichnis für diverse private Tagebücher. Jedem Stichwort ist eine oder mehrere Datumsangaben sowie ein oder mehrere Kategorien zugeordnet... bei der Programmierung der Eingabemaske für die Relationstabelle STICHWORT_DATUM tritt ein mir unerklärlicher Fehler auf, das Ergebnis einer SELECT-Abfrage (drittletzte Zeile) ist false - gebe ich dagegen die gleiche Query in phpmyadmin ein, wird mir ein korrektes Ergebnis angezeigt! Warum?
if (isset($_POST["stichwort"]) && !empty($_POST["stichwort"]) && isset($_POST["datum"]) && !empty($_POST["datum"])) { $inhalt1 = file_get_contents($datei1); // var_dump($inhalt1); $sql = "SELECT nr, stichwort FROM STICHWOERTER WHERE stichwort = ".$_POST['stichwort']; $res = $db->query($sql); var_dump($res); // false!
Neben dem schon [von @dedlfix](https://forum.selfhtml.org/self/2021/oct/01/php-7-wieso-gibt-query-hier-false-zuruck/1792058#m1792058) erwähnten, nicht beachteten Kontextwechsel dürfte hier auch noch der Datentyp und die Syntaxkonvention für den Datentyp (hier mutmaßlich char
oder varchar
) eine Rolle spielen.
Wenn es sich bei der Spalte stichwort
um char
oder varchar
handeln sollte, muss auch der mit dem Feld zu vergleichende Wert von $_POST['stichwort']
in Anführungszeichen gesetzt werden.
$sql = "SELECT nr, stichwort FROM STICHWOERTER WHERE stichwort = '".$_POST['stichwort']."'";
Tschö, Auge
Hallo,
das Ergebnis einer SELECT-Abfrage (drittletzte Zeile) ist false - gebe ich dagegen die gleiche Query in phpmyadmin ein, wird mir ein korrektes Ergebnis angezeigt! Warum?
vermutlich weil du in der Konsole vom PMA die fehlenden Anführungszeichen unbewusst ergänzt hast.
$sql = "SELECT nr, stichwort FROM STICHWOERTER WHERE stichwort = ".$_POST['stichwort']; $res = $db->query($sql); var_dump($res); // false!
Oh, der kleine Bobby Tables macht wieder Luftsprünge vor Vergnügen!
Dass dieses Statement lebensgefährlich für deine Daten sein kann, haben die beiden Kollegen ja schon erwähnt. Ich kann mich dieser Warnung nur anschließen.
Live long and pros healthy,
Martin