PDO没有插入 - 没有错误

时间:2013-01-23 16:54:05

标签: php mysql database pdo

我不明白为什么这些行不起作用:

  $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

编辑:谢谢大家!真的!

4 个答案:

答案 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