-1

这是我的代码片段:

    require_once('functions.php');
    include('dbinfo.php');
    connectdb();


$querys= "SELECT 'score' FROM solve WHERE (problem_id='".$_GET['id']."' AND username='".$_SESSION['username']."')";
            $resultscore=mysql_query($querys);
            $scorefetch=mysql_fetch_array($resultscore);
            $subractscore=$scorefetch['score'];
echo $subractscore;

理想情况下,输出应该是存储在数据库的 score 字段中的值。但它是打印的

分数

' .. 我在哪里错了?而且查询结果一次只有一条记录。

4

1 回答 1

7

您的查询无法按预期工作的原因是因为您使用单引号将列名括起来。它们(列名和表名)是标识符而不是字符串文字,因此它们不应该用单引号引起来。

SELECT score FROM solve WHERE....

如果碰巧使用的列名和/或表名是保留关键字,则可以使用反引号而不是单引号对它们进行转义。

在这种情况下,不需要反引号,因为它们都不是保留关键字。


作为旁注,SQL Injection如果变量的值(s)来自外部,则查询很容易受到攻击。请看下面的文章,了解如何预防。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

于 2013-05-09T13:52:01.207 回答