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

Posted

技术标签:

【中文标题】调用未定义的方法 PDO::real_escape_string()【英文标题】:Call to undefined method PDO::real_escape_string() 【发布时间】:2016-07-09 17:05:25 【问题描述】:

我想使用 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】:

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

但请注意:

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

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

【讨论】:

你不会,你可以通过最后提供的链接使用准备好的语句。 如何从 json_decode(或 $data)中提取姓名和电子邮件值? 感谢您的警告。 AFAIK,您不能使用准备好的语句构建大批量插入语句。你需要一大串字符串(2020)。

以上是关于调用未定义的方法 PDO::real_escape_string()的主要内容,如果未能解决你的问题,请参考以下文章

调用未定义的方法 BelongsTo::attach()

未调用自定义 UIButton 的 setIsSelected 方法

调用未定义的方法 Cake\ORM\Entity::query() CakePhp

致命错误:未捕获的错误:调用未定义的方法 stdClass::option();

调用类方法时出现“调用未定义函数”错误

调用未定义的方法 Illuminate\Foundation\Application::bindShared()