调用未定义的方法PDO :: real_escape_string()

时间:2016-07-09 17:05:25

标签: php angularjs ms-access

我想使用php和angular js将数据插入MS Access数据库 我的Angular JS代码如下

var app=angular.module('cardupdate',[]);
app.controller('cardContl',function($scope,$http){
    $scope.insertCardInfo=function(){
        $http.post("insert.php",{'name':$scope.name,'email':$scope.email})
                .success(function(){
                    $scope.msg="data inserted success";
                });
        };
});

之后的insert.php代码
$dbName =$_SERVER["DOCUMENT_ROOT"] . "/name/test.mdb";
if (!file_exists($dbName)) {
    die("Could not find database file.");
}
$db = new PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$dbName; Uid=; Pwd=;");
$connstr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$dbName;";
$conn_access = odbc_connect($connstr, "", "");

$data=json_decode(file_get_contents("php://input"));
$name=$db->real_escape_string($data->name);
$email=$db->real_escape_string($data->email);
$q="insert into Table1 values(1,'$name','$email')";
odbc_exec($conn_access, $q);

我收到以下错误:

致命错误:在第14行的C:\ xampp \ htdocs \ name \ insert.php中调用未定义的方法PDO :: real_escape_string()

1 个答案:

答案 0 :(得分:3)

您尝试使用的功能不存在,因此出现错误。您正在寻找的是PDO的另一种选择(尽管鲜为人知),称为PDO::quote

但是请注意:

  

如果您使用此函数构建SQL语句,强烈建议您使用PDO :: prepare()来准备带有绑定参数的SQL语句,而不是使用PDO :: quote()将用户输入插入到SQL语句中。带有绑定参数的预处理语句不仅更易于移植,更方便,不受SQL注入的影响,但执行速度通常比内插查询快得多,因为服务器端和客户端都可以缓存查询的编译形式。

所以你宁愿使用prepared statements并避免整个转义过程。