Connexion à une bd et lecture de base

oOli0o
Invité n'ayant pas de compte PHPfrance

26 nov. 2010, 20:01

Bonjour,

J'essaie de lire une base SQL (free) et de l'afficher mais rien à faire. Pourriez-vous m'aider?
<?php
    $link = mysql_connect( 'http://sql.free.fr', 'h***********is', '********' )or die ("connexion impossible"); // Connexion à la base de données
    //sélection de la base de données:
    $base = mysql_select_db( 'h***********is', $link ) or die ("Sélection de la base impossible"); // Sélection de la base de données
    //création de la requête SQL:
    //$req = mysql_query('SELECT * FROM table')  or die ("Erreur reponse");
    $sql = "SELECT * FROM table";
    //exécution de notre requête SQL:
    // On lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas (or die)
    $req = mysql_query($sql, $link) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    $data = mysql_fetch_array($req);


    mysql_free_result ($req);
    //On ferme sql
    mysql_close ($link);
?>
On me répond :

Erreur SQL !
SELECT * FROM table
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 'table' at line 1

Autre info :
Ma table s'appelle : table

Merci par avance pour votre aide.

ViPHP
ViPHP | 5462 Messages

26 nov. 2010, 20:06

faut protéger la valeur avec ` puisque que table est un mot réserver
SELECT * FROM `table`

cFransssen
Invité n'ayant pas de compte PHPfrance

26 nov. 2010, 20:13

ou essaye ça :

Code : Tout sélectionner

<?php $id='ton id'; $passwd='ton mdp'; $link=mysql_connect("http://sql.free.fr",$id,$passwd) or die("connexion impossible"); mysql_select_db("h***********is") or die ("Sélection de la base impossible"); // Sélection de la base de données $requete = "SELECT * FROM table"; //exécution de notre requête SQL: // On lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas (or die) $resultat = mysql_query($requete) or die("query failed"); ; $nbligne=mysql_num_rows($resultat); echo $nbligne, " résultats"; echo "<br>"; echo "<table>"; while ($info = mysql_fetch_assoc($resultat)) { echo "<tr>"; echo "<td> {$info['champ a afficher']} </td> <td> {$info['champ a afficher']} </td>"; echo "</tr>"; }; echo "</table>"; mysql_close(); ?>

ViPHP
ViPHP | 5462 Messages

26 nov. 2010, 20:59

:shock: l'erreur sera la même

oOli0o
Invité n'ayant pas de compte PHPfrance

26 nov. 2010, 23:03

J'ai changé le nom de la table et tout est rentré dans l'ordre.

devlop78
Invité n'ayant pas de compte PHPfrance

27 nov. 2010, 00:51

Oui, contourner le problème est en effet une solution ...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 nov. 2010, 11:46

Oui, contourner le problème est en effet une solution ...
Je ne sais pas si c'est à oOli0o ou à stealth35 que tu réponds, donc je m'excuse d'avance si j'ai mal compris, mais en l'occurrence, le problème est qu'il ne faut pas utiliser de mots clés SQL réservés pour nommer ses tables ou ses colonnes.

L'erreur la plus fréquente concerne le type DATE. En SQL il ne vous viendrait pas à l'idée d'appeler votre colonne VARCHAR, INT ou ENUM... cela devrait être la même chose avec DATE. De même il ne faut pas appeler une table INSERT, CREATE, UPDATE... ou TABLE, c'est réservé :) (tout comme bon nombre de constantes ou de méthodes en php)

MySQL permet de "contourner le problème" en utilisant des `` pour protéger le nom des tables ou des colonnes qui n'ont pas été pensés correctement, mais c'est bien le seul SGBD qui ait jugé utile de le faire...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...