我之前从未使用过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。我做错了什么?
答案 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注入的任何风险,并保护您的数据库。
这就是为什么你不需要自己插入引号。