以下是我的代码片段:
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;
理想情况下,输出应该是存储在数据库的得分字段中的值。但它是打印'
得分
'..我错在哪里?此外,查询一次只会产生一条记录。
答案 0 :(得分:7)
您的查询无法按预期工作的原因是因为您使用单引号包装列名称。它们(列名和表名)是标识符而不是字符串文字,所以它们不应该用单引号换行。
SELECT score FROM solve WHERE....
如果使用的列名和/或表名是保留关键字,则可以使用反引号转义它们,而不是单引号。
在这种情况下,不需要反引号,因为它们都不是保留关键字。
作为旁注,如果变量的值( s )来自外部,则查询易受SQL Injection
攻击。请查看下面的文章,了解如何防止它。通过使用PreparedStatements
,您可以摆脱在值周围使用单引号。