我使用PDO将值插入到我的数据库中。 我在配置文件中使用以下代码连接到我的数据库
define('USER', 'XX');
define('PASS', 'YY');
define('DSN', 'mysql:host=localhost;dbname=mydbtest;charset=utf8mb4');
try {
$dbh = new PDO(DSN, USER, PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"));
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
print "Erreur ! : " . $e->getMessage() . "<br/>";
die();
}
在一个单独的文件中,我检索$ _POST值,准备我的查询并执行它:
include_once('connect.inc.php');
try
{
/***************** COMPANY DATA POST **************/
$entite_juridique = $_POST['entite_juridique'];
$enseigne_commerciale = $_POST['enseigne_commerciale'];
$raison_sociale = $_POST['raison_sociale'];
$adresse = $_POST['street_number'] . " " . $_POST['route'];
$adresse2 = $_POST['adresse2'];
$cp = $_POST['cp'];// 75008
$ville = $_POST['ville'];// Paris
$country = $_POST['country'];// France
$region = $_POST['region'];// Île-de-France
$departement = $_POST['departement'];// Paris (75)
$tel = $_POST['tel'];
$email = $_POST['email']; //aaaa@mail.com
$website = $_POST['website'];
$categorie = $_POST['categorie'];
$facebook = $_POST['facebook'];
$twitter = $_POST['twitter'];
$google = $_POST['google'];
$siren = $_POST['siren'];
$lieu_immat = $_POST['lieu_immat'];
$capital = $_POST['capital'];
$description = $_POST['description'];
$status = $_POST['status'];
//$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO cc_a
(entite_juridique, enseigne_commerciale, raison_sociale, adresse, adresse2, cp, ville,
country, region, departement, tel , email, website, categorie, facebook, twitter, google,
siren, lieu_immat, capital, description, status)
VALUES (:entite_juridique, :enseigne_commerciale, :raison_sociale,:adresse, :adresse2,:cp,:ville,
:country, :region, :departement, :tel, :email, :website, :categorie, :facebook,:twitter, :google,
:siren,:lieu_immat, :capital, :description, :status)";
$sth = $dbh->prepare($sql);
$sth->execute(array(':entite_juridique' => $entite_juridique,
':enseigne_commerciale' => $enseigne_commerciale,
':raison_sociale' => $raison_sociale,
':adresse' => $adresse,
':adresse2' => $adresse2,':cp' => $cp,
':ville' => $ville,
':country' => $country,
':region' => $region,
':departement' => $departement,
':tel' => $tel ,
':email' => $email,
':website' => $website,
':categorie'=> $categorie,
':facebook' => $facebook,
':twitter' => $twitter,
':google' => $google,
':siren' => $siren,
':lieu_immat' => $lieu_immat,
':capital' => $capital,
':description' => $description,
':status' => $status ));
$sth= $dbh->exec($sql);
echo 'OK';
}
catch(Exception $e) //en cas d'erreur
{
echo 'KO';
echo 'Erreur : '.$e->getMessage().'<br />';
echo 'N° : '.$e->getCode();
exit();
}
问题是插入的值很好但是我得到了以下错误:
Erreur:SQLSTATE [42000]:语法错误或访问冲突:1064你 您的SQL语法有错误;检查对应的手册 您的MySQL服务器版本,以便在附近使用正确的语法 ':entite_juridique,:enseigne_commerciale,:raison_sociale,:adresse, :adresse2,:c'在第2行N°:42000
我不明白为什么会出现错误并插入值。
注意:当我从配置文件中删除此$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
时,不会出现任何错误。
答案 0 :(得分:3)
$sth= $dbh->exec($sql);
您已使用$sth->execute()
执行了准备好的查询。
您正在第二次执行查询而不通过运行exec($sql)
来绑定参数。
当您禁用ERRMODE_EXCEPTION时没有收到错误的原因是因为您禁用了例外或PDO错误,您正在捕捉&#34;。您的代码中没有任何地方可以查找错误消息,您的代码已设置为捕获PDO在发生错误时抛出的异常。
如果您禁用了ERRMODE_EXCEPTION,然后执行了类似的操作:
if (!$dbh->exec($sql)) {
print_r($dbh->errorInfo());
}
然后你会得到同样的错误。