PHP:帖子使用准备,不工作

时间:2013-03-04 21:56:39

标签: php sql prepared-statement

我尝试将表单的数据存储到数据库中。我无法弄清楚为什么这段代码不起作用......没有任何反应。 谢谢您的帮助。 这是我的代码:

<?php
// Connexion à la base de données
try
{
$bdd = new PDO('mysql:host=localhost;dbname=mydb', 'root', '');
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
// Insertion du message à l'aide d'une requête préparée

$auteur="Henri";

$req = $bdd->prepare('INSERT INTO factures (projet, fournisseur, montant, ref, in_out, commentaires, auteur, input_date, maturity) VALUES(:projet, :fournisseur, :montant, :ref, :in_out, :commentaires, :auteur, CURDATE(), :maturity');
$req->execute(array(
                    'projet'=>$_POST['projet'], 
                    'fournisseur'=>$_POST['fournisseur'], 
                    'montant'=>$_POST['montant'], 
                    'ref'=>$_POST['ref'],
                    'in_out'=>$_POST['in_out'],
                    'commentaires'=>$_POST['commentaires'], 
                    'auteur'=>$auteur,
                    'maturity'=>$_POST['maturity']
                    ));

header('Location: index.php');
?>

正确的代码: - 'projet'=&gt; $ _ POST ['projet']必须为':projet'=&gt; $ _ POST ['projet'], - 在VALUES SQL查询结束时出现了缺失。

1 个答案:

答案 0 :(得分:3)

Documentation可以看出,您放入准备好的SQL语句中的值必须与您在execute()上传递的值完全匹配。

IE:

'projet'=>$_POST['projet'],应为':projet'=>$_POST['projet'],

您的代码没有做任何事情的原因是因为$_POST['projet']的值被映射到'projet'。因为“项目”没有出现在您的SQL语句中,所以它没有被映射。但是,在这种情况下,您在SQL语句中缺少“)”。

但是,赞成使用PDO而不是my_sql函数。