0

我问这个是因为我一直在为一个很可能有一个简单解决方案的东西而苦苦挣扎。我的问题是我正在尝试选择包含类似于“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";
}

一如既往,非常感谢您对此的任何帮助

4

1 回答 1

3

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

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

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

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

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

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

于 2013-04-07T04:13:41.947 回答