PDO没有像教程所说的那样插入行

时间:2012-11-15 13:56:12

标签: php mysql pdo

我之前从未使用过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.数据库的结构是gID(传递NULL,因为它自动增量), gTruck,gLat,gLong,gAlt,gTime。我做错了什么?

2 个答案:

答案 0 :(得分:5)

尝试删除语句中变量的引号。 PDO将根据值的类型插入或不插入。

答案 1 :(得分:0)

您不必对PDO使用简单的引号:变量。如果这样做,pdo将查找名为':variable'的列,并且不会使用指定的值。

试试这个:

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

告诉我们$stmt->errorInfo()

会发生什么 祝你好运

修改

不要忘记PDO的变量默认情况下插入引号,因此它可以防止sql注入的任何风险,并保护您的数据库。

这就是为什么你不需要自己插入引号。