PDO:需要逃脱字符串吗?

时间:2016-05-25 09:39:50

标签: php mysql pdo

我使用此代码将一些数据插入到我的数据库中。 我根据mysqli调整了以前的代码,现在就使用PDO了。

对于2个参数name和id,我是否需要使用类似mysqli_real_escape_string和PDO的函数来转义它们?或者可以在查询中传递这些params direclty吗?

<?php
try
{  
    $pdo = new   PDO('mysql:host='.$servername.';port='.$dbport.';dbname='.$dbname.'', $username, $decodedPwd);

    $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $json = $_POST['jsonData'];
    $id = $json["id"]
    $name = $json["name"]

    $pdo->beginTransaction();

    // do request

    $pdo->query('INSERT INTO test(id, name) VALUES ('$id', '$name')');

    $pdo->commit();

    echo 'Everything is OK';
}
catch(Exception $e)
{
    $pdo->rollback();

    echo 'An error occurred :<br />';
    echo 'Error : '.$e->getMessage().'<br />';
    echo 'N° : '.$e->getCode();

    exit();
}

3 个答案:

答案 0 :(得分:2)

你需要准备你的陈述,试试这个:

$query = $pdo->prepare('INSERT INTO test(id, name) VALUES (:theid, :thename)');
$query->execute(array(
    'theid' => $id,
    'thename' => $name
));

答案 1 :(得分:1)

您不必转义字符串,但您必须使用preared语句。

这是您的代码应该是什么。

import sys
print(sys.executable)
/usr/local/opt/python/bin/python2.7

请注意,事务对于单个查询而言是无用的,并且您报告错误的方式是错误的。

另外,如果$ json已经包含了查询的所有数据,则无需将其内容存储在单独的变量中。

答案 2 :(得分:0)

不行。您需要使用prepared statementsPDO::quote()