Yadgar: PHP 7: Wieso gibt query() hier false zurück?

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!

  1. 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

    --
    200 ist das neue 35.
  2. 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

    --
    Klein φ macht auch Mist.