我之所以这样问,是因为我一直在想办法解决一个简单的问题。我的问题是我试图选择一条包含类似于“ 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上提出有意义的问题。
上面的过程称为调试,是程序员工作中必不可少的部分。