10

これらの行が機能しない理由がわかりません:

  $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

4 に答える 4

31

エラーを発生させるように PDO に指示する必要があります

$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

例外を処理する方法はまったく役に立たないことに注意してください。コードから try-catch ブロックを削除することをお勧めします

于 2013-01-23T16:57:25.420 に答える
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 );  
于 2013-01-23T16:58:11.570 に答える
0

コードが Apache で正しく動作し、IIS で動作しなくなった場合、環境の変更が原因である可能性があり、コードには何もありません。Windows の PDO 拡張機能が有効になっているかどうかを確認しましたか?

Windows 用の主な 4 つの PDO dll は次のとおりです。

extension=php_pdo.dll
extension=php_pdo_mysql.dll
extension=php_pdo_mssql.dll
extension=php_pdo_odbc.dll

これらのうち、PDO 拡張機能を機能させるには、php.ini で最初の 2 つを有効にする必要があると思います

于 2013-01-23T17:02:10.593 に答える
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

于 2014-10-15T22:30:32.133 に答える