php - PDO 出现错误

标签 php mysql pdo

所以我尝试在我的代码中使用这个 name = $con->real_escape_string($_POST['name']); ,但它不起作用。我收到错误

Fatal error: Call to undefined method PDO::real_escape_string() in /Users/idrisk/Colourity/si/r.php on line 15` I'm not sure what that means. Here's the code I have so far.

$username = "xxx";
$password = "xxx";
try
    {
    $con = new PDO('mysql:host=localhost;s=myDatabase', $username, $password);
    $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }catch(PDOException $e)
    {
    echo 'ERROR: ' . $e->getMessage();
    }



        $name = $con->real_escape_string($_POST['name']);
        $username = $con->real_escape_string($_POST['username']);
        $email = $con->real_escape_string($_POST['email']);
        $password1 = $con->real_escape_string($_POST['pass1']);
        $password2 = $con->real_escape_string($_POST['pass2']);

有什么想法吗?

最佳答案

PDO 没有 real_escape_string 函数,但它有 PDO::quote()

$name = $con->quote($_POST['name']);

PDO::quote() 做了一件 mysqli::real_escape_string() 不做的事情:它在生成的转义字符串周围添加引号。

mysqli 示例:

$name = $mysqli->real_escape_string($_POST['name']);
$sql = "SELECT * FROM table1 WHERE name = '$name'"; // use single-quotes

PDO 示例:

$name = $pdo->quote($_POST['name']);
$sql = "SELECT * FROM table1 WHERE name = $name"; // don't use single-quotes

无论如何,正如 @AmalMurali 上面评论的那样,最好使用准备好的语句和参数。这是使用prepare()并将参数传递给execute()的简单方法:

$sql = "INSERT INTO table1 VALUES (:name, :username, :email, :pass1)";
$params = array_intersect_key($_POST, 
    array_flip(array('name', 'username', 'email', 'pass1')));
$stmt = $pdo->prepare($sql);
$stmt->execute($params);

参数更好,因为它们对于防止 SQL 注入(inject)同样安全,而且比困惑且容易出错的转义、引用和字符串连接更容易正确。

如果您不认识我展示的某些功能,请阅读文档:

习惯阅读文档。阅读文档、阅读其他人的代码和实验是我们大多数人学习所有这些东西的方式。

几乎所有 PHP 文档页面中甚至都有代码示例。

关于php - PDO 出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23189303/

相关文章:

php - PDO 语句错误

mysql - mysql 时移差异天数

php - PDO foreach 不显示正在获取的数据

java - 如何显示多个检索数据的项目 MySQL 和 Android

php - 将 float 存储到之前转义为字符串的数据库? - 安全的?

mysql - 使用内连接组合 mysql 查询 SUM() 结果

php - foreach $data 没有显示任何 CI Mysql

php - 将 SQL 转换为 PDO 以防止 SQL 注入(inject)

mysql PDO和存储过程动态SQL注入(inject)

php - PHP 中带有守卫的有限状态机?