Syntaxte UPDATE pour PDO

Répondre
jackbocar
le 17/01/2007 à 14:29
jackbocar
Bonjour,

Je ne trouve pas la bonne syntaxe pour UPDATE avec PDO :

Mon ancien code :

$sql = 'UPDATE infos SET date="'.$date.'", titre="'$_POST['titre']'", text="'$_POST['text']'"';

Comment écrire la syntaxe avec une base PDO.

Pour SELECT et INTO ça fonctionne très bien voici un bout de code :

$sql = 'SELECT id, date, titre, text FROM infos';
$sth = $dbh->query($sql);
$result = $sth->fetchALL (PDO::FETCH_ASSOC);

foreach ($result as $row) {
$date=$row['date'];
$titre=$row['titre'];
$text=$row['text'];

Merci de votre aide pour la syntaxe UPDATE

Jack Bocar
moogli
le 17/01/2007 à 19:30
moogli
salut,

y a un message d'erreur avec ça ?

un peut de lecture qui répond à ta question
http://www.phpteam.net/index.php?option=com_content&task=view&id=71&Itemid=100
">http://www.siteduzero.com/tuto-3-8332-1-php-pdo-interface-d-acces-aux-bdds.html
[lien]http://www.ibilab.net/webdev/articles/PHP/bibliotheque-12.htm[/url]
bien d'autre doivent exister google t'aidera fortement à les trouver !
(telle la ref php : [lien]http://php.net/pdo[/lien]

En faisant un c/c de ton code, j'ai remarqué qu'il manque des . pouc concaténer tes variables !

Il aussi impératif de vérifier le contenu des variables avant utilisation dans un SGBD !

après quelques tests (et malgrès ce que dis le 2nd lien, il est possible d'utiliser query() pour une requete update). Je pense que ta requete est foireuse !

pdo utilise les exceptions, oui, mais pas en cas d'erreur sur la requet, il te faut donc vérifier l e retour de la méthode query (ou exec) afin de savoir si la requete c'est déroulé correctement et le cas échéant utiliser la méthode errorInfo !

exemple
[code]
<?php
try
{
$connexion = new PDO('mysql:host=localhost;dbname=badaiglon', 'root', '');
}

catch(Exception $e)
{
echo 'Erreur : '.$e->getMessage().'';
echo 'N° : '.$e->getCode();
}
$sql = 'UPDATE droit set visible=\'false\'';
try {
$a = $connexion->query($sql);
}
catch(Exception $e)
{
echo 'Erreur : '.$e->getMessage().'';
echo 'N° : '.$e->getCode();
}
echo '<pre>',var_dump($connexion->errorInfo()),'</pre><hr />';
var_dump($a);
?>
[/code]
Dans mon cas la table s'appelle droit[b]s[/b]
=> pas d'exception, mais $a == false
[quote]
array(3) {
[0]=>
string(5) "42S02"
[1]=>
int(1146)
[2]=>
string(37) "Table 'badaiglon.droit' doesn't exist"
}

bool(false)
[/quote]

les classes magiques n'empeche pas un minimum de vérification ;)

smiley
Il en faut peu pour être heureux !!!!!
jackbocar
le 18/01/2007 à 06:28
jackbocar
Bonjour,

Merci Moogli de ta réponse, mais tout ceci, je l'ai déjà vu. Ce que je cherche c'est un code qui fonctionne avec un formulaire de façon à modifier une nouvelle ou le titre de cette nouvelle, effectivement, si je fais une nouvelle requête à chaque fois avec un code de ce genre j'y arrive :

"UPDATE my_news SET titre='PDO', monTexte=' Texte de ma News' WHERE titre='PDO c'est BO'";

Mais, la syntaxe d'une requête qui modifie ou le texte ou le titre depuis un formulaire, je ne trouve pas !

Mais, je me dis que ce n'est pas très important, puisque c'est de la cuisine interne, et l'essentiel est dans l'enregistrement de la nouvelle et sont affichage, plus souple et mieux sécurisé avec PDO, je garde mes anciens codes pour la modification des nouvelle et j'utilise PDO pour envoyer au serveur et afficher à l'écran PDO.

Si tu trouves un code qui fonctionne avec un formulaire, je suis preneur, je continue à rechercher de mon côté. C'est tout de même blizzard de ne pas trouver un seul exemple sur le NET ?

Encore merci.

Jack Bocar


Pour ce qui est de mon code pour lire la news :


$sql = 'SELECT id, date, titre, news FROM news';
$sth = $dbh->query($sql);
$result = $sth->fetchALL (PDO::FETCH_ASSOC);

foreach ($result as $row) {
$date=$row['date'];
$titre=$row['titre'];
$news=$row['news'];

$jour = substr($date_pub, 8, 2);
$mois = substr($date_pub, 5, 2);
$annee = substr($date_pub, 0, 4);
$date = $jour.'-'.$mois.'-'.$annee;

echo '<table border="0" width="100%" cellpadding="0" cellspacing="0" id="cadre-news"><tr><td>';
echo '<table border="0" width="100%" cellpadding="0" cellspacing="0"><tr>';
echo '<td width="20%" id="date-news">, (stripslashes(htmlentities(trim($row['date'])))) ,</td>';
echo '<td width="80%" id="titre-news">, (stripslashes(htmlentities(trim($row['titre'])))) ,</td>';
echo '</tr>';
echo '</table>';
echo '<table border="0" width="100%" cellpadding="0" cellspacing="0"><tr>';
echo '<td id="texte-news">, nl2br(stripslashes(htmlentities(trim($row['news'])))) ,</td>';
echo '</tr>';
echo '</table>';
echo '</td></tr></table>';
echo '';
}
jackbocar
le 18/01/2007 à 08:55
jackbocar
Bonjour,

Pour tous ceux qui comme moi rechercherais une solution.

Après plusieurs essais, j'ai trouvé la solution. Il faut utiliser pour UPDATE :
$sth = $dbh->exec($sql);


Mon code pour lire avant modification dans un formulaire :

<?php
include_once('../_require/config.inc.php');

if (isset($_GET['id']) && !isset($_GET['go'])) {
$sql = 'SELECT titre, news FROM news WHERE id="'.$_GET['id'].'"';
$sth = $dbh->query($sql);
$result = $sth->fetchALL (PDO::FETCH_ASSOC);

foreach ($result as $row) {
$titre=$row['titre'];
$news=$row['news'];
}
}
?>
<form name="formulaire" method="post" action="edit_news_1.php?go=ok">
<table><tr><td align="left"><span class="texte">Titre :</span></td><td align="left"><input type="text" name="titre" value="<?php if (!isset($row['titre'])) $row['titre'] = ''; echo $row['titre']; ?>"></td></tr>
<tr><td colspan="2" align="center"><textarea name="news" cols="30" rows="3"><?php if (!isset($row['news'])) $row['news'] = ''; echo $row['news']; ?></textarea></td></tr>
<tr><td colspan="2" align="center"><input type="submit" value="Envoyer"></td></tr>
<input type="hidden" name="id" value="<?php echo $_GET['id']; ?>">
</table></form>

SUITE

Mon code pour UPDATE :

<?php
include_once('../_require/config.inc.php');

if (isset($_GET['go'])) {
if ((empty($_POST['titre'])) OR (empty($_POST['news']))) {
$_POST['titre'] = ($_POST['titre']);
$_POST['news'] = ($_POST['news']);
$message = 'Au moins un des deux champs est vide.';
$_GET['id'] = $_POST['id'];
}

$sql = 'UPDATE news SET titre="'.($_POST['titre']).'", news="'.($_POST['news']).'" WHERE id="'.$_POST['id'].'"';
$sth = $dbh->exec($sql);
}
header('Location: index.php');
exit();
?>

Jack Bocar
moogli
le 21/01/2007 à 16:08
moogli
c'est quand même indiqué dans les docs ......
Il en faut peu pour être heureux !!!!!
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours