出于某种原因,我不能让我的代码像我想要的那样工作。
$Check = $_POST['phrase'];
try{ $db=new readPDO('testDB'); $sql=('
SELECT entry, ID
FROM test
WHERE entry = "$Check "
');
$statement=$db->prepare($sql);
$statement->execute();
如果我试试这个:
$Check = $_POST['phrase'];
try{ $db=new readPDO('testDB'); $sql=('
SELECT entry, ID
FROM test
WHERE ID= "$Check "
');
$statement=$db->prepare($sql);
$statement->execute();
GET是一个工作正常的数字,但它不能用于字符串。
答案 0 :(得分:0)
正如Strings所述:
string文字可以用四种不同的方式指定:
- single quoted
- double quoted
- heredoc syntax
- nowdoc syntax(自PHP 5.3.0起)
单引号
指定string的最简单方法是将其用单引号(字符')括起来。
注意:与double-quoted和heredoc语法不同,variables和特殊字符的转义序列在不时会被展开它们出现在单引号string s。
中<? // [ deletia ] // Outputs: Variables do not $expand $either echo 'Variables do not $expand $either'; ?>
双引号
如果string包含在双引号(“)中,PHP将解释特殊字符的更多转义序列:
[ deletia ]双引号string的最重要特征是变量名称将被扩展。有关详细信息,请参阅string parsing。
在您的情况下,$sql
被赋予单引号字符串文字的值,其中$Check
变量不会被展开(虽然它本身被包围其中有双引号,就PHP解析器而言,它仍然是单引号字符串文字。)
使用双引号字符串文字将提供变量扩展。如果您仍希望使用双引号引用字符串文字中的$Check
,则必须对它们进行转义(使用反斜杠):
$sql = "
SELECT entry, ID
FROM test
WHERE entry = \"$Check \"
";
或者,现在可以使用单引号引用$Check
(自MySQL recognises both forms of string quoting开始,前提是ANSI_QUOTES
已禁用):
$sql = "
SELECT entry, ID
FROM test
WHERE entry = '$Check '
";
请注意,引号中的尾随空格将由MySQL作为字符串的一部分进行解析,这可能不是您的意图。
另请注意,此代码容易受到SQL注入攻击(如果$Check
恰好包含某些字符,也会出现错误)。您应该阅读@deceze的博客文章The Great Escapism (Or: What You Need To Know To Work With Text Within Text)以更好地理解这一点;然后How can I prevent SQL injection in PHP?了解如何修复它。