我之所以这样问,是因为我一直在想办法解决一个简单的问题。我的问题是我试图选择一条包含类似于“ 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";
}


一如既往,对此非常有帮助

最佳答案

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

知识将告诉他,任何特殊字符都不会影响正确格式化的PDO查询。
因此,该尝试一些经验了。意味着不仅要盯着代码,还要运行它。为了验证假设。

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

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

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

上面的过程称为调试,是程序员工作中必不可少的部分。

07-26 09:29