2

私はこれまで PDO を使用したことがありませんでしたが、最終的にセキュリティが主な関心事であり、使い慣れた組み込みの mysql ステートメントからより安全なものに切り替える必要があると判断しました。dbconn.php の db_connect() 関数は問題なく動作し、PDO チュートリアルからほとんどコピーして貼り付け、複数の SELECT ステートメントで正常にテストされました。

    include "dbconn.php";

    db_connect();

    //INSERT INTO  `a4331098_VAtest`.`VA_GPS` (`gID` , 'gtruck' , `gLat` , `gLong` , `gAlt` , `gTime`) VALUES (NULL , '434' , '47.558',  '-76.557',  '543',  '0111588448');
    $pTruck = $_POST['gTruck'];
    $pLat = $_POST['gLat'];
    $pLong = $_POST['gLong'];
    $pAlt = $_POST['gAlt'];
    $pTime = $_POST['gTime'];

    //echo $pTruck . "<br />" . $pLat . "<br />" . $pLong . "<br />" . $pAlt . "<br />" . $pTime . "<br /><br />";

    $stmt = $dbconn->prepare("INSERT INTO a4331098_VAtest.VA_GPS VALUES (NULL , ':fTruck' , ':fLat' , ':fLong' , ':fAlt' , ':fTime')");
    $stmt->execute(array(':fTruck' => $pTruck , ':fLat' => $pLat , ':fLong' => $pLong , ':fAlt' => $pAlt , ':fTime' => $pTime));
    $affected_rows = $stmt->rowCount();
    echo $affected_rows;

正しい値がスクリプトに渡されていることは知っていますが (コメントアウトされたエコーがそれを示していました)、何らかの理由で $affected_rows は 0 を返し続けます。 、gLong、gAlt、gTime。私は何を間違っていますか?

4

2 に答える 2

5

ステートメント内の変数を囲む引用符を削除してみてください。PDO は、値のタイプに基づいてそれらを挿入するかどうかを決定します。

于 2012-11-15T14:00:44.687 に答える
0

PDO :variables で単純な引用符を使用する必要はありません。その場合、pdo は指定された列を探し':variable'、割り当てられた値を使用しません。

これを試して :

 $stmt = $dbconn->prepare("INSERT INTO a4331098_VAtest.VA_GPS VALUES (NULL , :fTruck , :fLat , :fLong , :fAlt , :fTime)");

そして何が起こるか教えてください$stmt->errorInfo()

幸運を

編集

PDO の変数はデフォルトで引用符付きで挿入されることを忘れないでください。これにより、SQL インジェクションのリスクを防ぎ、データベースを保護できます。

そのため、自分で引用符を挿入する必要はありません。

于 2012-11-15T14:04:24.430 に答える