我不明白为什么这些行不起作用:
$host = 'localhost';
$dbname='mydbname';
$login='mylogin';
$pwd='mypwd';
$datex = date('Y/m/d H:i:s');
$nomx = 'jrmy';
$numx = '007';
try {
$bdd = new PDO('mysql:host='.$host.';dbname='.$dbname, $login, $pwd);
}
catch(Exception $e) {
die('Erreur : '.$e->getMessage());
}
$bdd->exec('INSERT INTO dossiers(date, nom, numero, disp) VALUES(\''.$datex.'\', \''.$nomx.'\', \''.$numx.'\', \'Y\')');
$id = $bdd->lastInsertId();
$bdd= null;
echo 'id: '.$id;
披露:该脚本在我的apache服务器上运行,因为我在IIS服务器上安装了我的脚本,所以它停止了工作......
并且查询功能完美运行...查询OK,插入NO
编辑:谢谢大家!真的!答案 0 :(得分:25)
您需要告诉PDO引发错误
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
请注意,您处理异常的方式毫无用处。最好从代码中删除try-catch块
答案 1 :(得分:4)
您没有充分利用PDO。使用参数插入数据
示例:
$bdd->exec('INSERT INTO dossiers(date, nom, numero, disp) VALUES(?, ?,?, ?)');
$bdd->bindParam(1, $datex);
$bdd->bindParam(2, $nomx);
$bdd->bindParam(3, $numx);
$bdd->bindParam(3, 'Y');
并使用它来引发错误:
$bdd>setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
答案 2 :(得分:0)
如果代码在Apache中正常工作并且在IIS中停止工作,那么环境更改可能会导致它,并且代码中没有任何内容。您是否检查过Windows中的PDO扩展是否已启用?
这些是Windows的四个主要PDO dll:
extension=php_pdo.dll
extension=php_pdo_mysql.dll
extension=php_pdo_mssql.dll
extension=php_pdo_odbc.dll
其中我认为需要在php.ini中启用前两个才能使PDO扩展工作
答案 3 :(得分:0)
我遇到了类似的问题,结果是因为我没有为PDO启用自动提交..使用显式事务帮助我;
self::$_pdo->beginTransaction();
$sql = "INSERT INTO redirects (source, target, http_status_code, aspect_id) VALUES(?, ?, ?, ?)";
$query = self::$_pdo->prepare($sql);
$query->execute(array($_POST['source'], $_POST['target'], $_POST['http_status_code'], $_POST['aspect_id']));
self::$_pdo->commit();
(是的,有一百万种方式可以更好地完成上述操作,但我只是在展示交易。请在此处阅读:http://php.net/manual/en/pdo.transactions.php)