MySQL mit PHP ansprechen (Problem)



  • Hi,

    ich bin noch nicht sehr geübt im Umgang mit PHP, das hier stammt aus meinem eigentlich ersten Projekt:

    <?php
    
    $db = mysql_connect('localhost', '...', '...')
     or die ("Verbindung Fehlgeschlagen");
    
    mysql_select_db('montblanc', $db);
    $sql_statement = "SELECT * FROM 'goba_news'";
    $result = mysql_query($sql_statement);
    
    while($data = mysql_fetch_array($result))
    {
    	echo $data['news_head'] . "   " . $data['news_text'] . "<br>";
    }
    
    ?>
    

    Das da oben ist natürlich keine direkt ausgeführte Datei sondern die ist mit include() in eine Tabelle eingefügt.

    Wenn ich das ausführe, kommt als Fehlermeldung:

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /usr/export/www/vhosts/funnetwork/hosting/montblanc/goethebash/news.php on line 10

    Was hab ich falsch gemacht?

    mfg
    Jakel



  • Setz doch ein

    echo mysql_error();
    

    nach dem

    ...
    $result = mysql_query($sql_statement);
    

    Dann siehst du vielleicht mehr.



  • Dann steht da:

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''goba_news'' at line 1



  • Dein "goba_news" hast du in Stringliterale (') eingeschlossen. Wieso? Es ist kein String, es ist eine Tabelle! Also nimm entweder die (für MySQL) korrekten Backticks (`), oder lass die Begrenzungszeichen einfach weg (meine Empfehlung) 😉

    Ich rate (mal wieder) zu einem guten Grundlagentutorial 😉



  • árn[y]ék schrieb:

    Also nimm entweder die (für MySQL) korrekten Backticks (`), oder lass die Begrenzungszeichen einfach weg (meine Empfehlung)

    Also ich würde sie nicht weglassen, habe da das eine oder andere mal schon Probleme gehabt, sicherer ist es mit Backticks.



  • Stell dir mal die Frage, warum du die Backticks verwenden solltest?

    Sie sind Zeichen, um komplexe Spalten- und Tabellennamen zu maskieren, also beispielsweise Spalten mit dem Namen "Eine kleine Spalte" oder dergleichen. Solche Spaltennamen sind programmiertechnisch jedoch völliger unsinn. Normalerweise sollten Spalten- und Tabellennamen nur aus den ASCII-Zeichen [A-Za-z0-9] bestehen (zuzüglich einiger Zeichen wie "_"). Die Maskierung ist bei einer vernünftigen Vergabe von Bezeichnungen völlig überflüssig.

    Nicht nur das! Jeder SQL-Dialekt kocht da sein eigenes Süppchen. In MSSQL wäre es beispielsweise nicht `aTableName` sondern [aTableName]. Solltest du jemals in den Genuss kommen, ein Projekt von einer Datenbank auf eine andere migrieren zu müssen, dann ist es der größte Käse überhaupt, dialektspeziefische SQL-Statements über den gesamten Quellcode verteilt zu haben.

    Ergo: Entweder, du verwendest einen Wrapper dafür (sehr schön: Prepared Statements) und umgehst das Maskierungschaos so, oder du verwendest keine Maskierungen 😉 PS sind hier natürlich vorzuziehen.

    $statement = new sqlStatement('SELECT * FROM ?');
    $statement->bindParams(array('goba_news'));
    $result = $statement->execute();
    


  • Hi,

    erstmal danke, jetzt funktionierts 😃

    Und ein Grundlagentutorial hatte ich bereits, nur ist das recht lange her 😉

    mfg
    Jakel


Anmelden zum Antworten