PDO select语句中的特殊字符

时间:2013-04-07 03:54:40

标签: php mysql pdo

我问这个是因为我一直在墙上敲打着一个很可能有一个简单解决方案的东西。我的问题是我试图选择一个包含类似于“ss& 246i”的唯一ID的记录。如果该陈述不包含&符号它返回正常但如果它有一个我得不到回报。这是我的代码来补充我的问题:

<?php
@session_start();

if (isset($_POST['code'])) {
    $id = $_POST['code'];
    $db = new PDO('mysql:host=localhost;dbname=example', 'example', '******');
    $db->exec("SET CHARACTER SET utf8");

    $sql = "SELECT * FROM tbl_human_readable WHERE unique_id = :id  LIMIT 1";
    $stmt = $db->prepare($sql);
    $stmt->bindValue(":id", $id);
    try {
        $stmt->execute();
    } catch (PDOException $e) {
        echo $e->getCode() . " - " . $e->getMessage();
    }

    $return = $stmt->fetchAll(PDO::FETCH_ASSOC);
    var_dump($return);
    if ($return) {
        $_SESSION['code'] = $id;
        echo "success"; 
    } else {
        echo "failed";
    }
} else {
    echo "failed";
}

一如既往地对此有任何帮助非常感谢

1 个答案:

答案 0 :(得分:3)

解决问题时,程序员必须使用知识经验

知识会告诉他没有特殊字符会影响格式正确的PDO查询 所以,是时候尝试一些经验了。意味着一个人不只是盯着代码,而是运行它。以验证假设为目的。

您假设$ _POST ['code']包含文字ss&246i值。但你无法知道它是否真实 - 你从未验证过它。因此,您必须在脚本中放置验证码以确保。

您假设该数据库包含文字ss&246i值。但你无法知道它是否真实 - 你从未验证过它。因此,您必须运行一些代码来验证假设 - 尝试选择硬编码的文字值而不是发布一个。

这样,一个接一个地验证你所有的假设并找出哪些是假的。因此,您可以自己解决问题,也可以在Stack Overflow上提出有意义的问题。

上述过程称为调试,是程序员工作的重要组成部分。