我有一个脚本,我想从表中读取,并列出列check=1的所有"任务"。我的脚本运行良好,将列出所有任务。。。。直到我包括WHERE。然后页面中不会读取任何内容。我做错了什么?
问题出在WHERE check="1"
上
$sql = mysql_query('SELECT tasks FROM tasks WHERE check="1"');
while($row = mysql_fetch_array($sql))
{
echo $row['tasks'];
echo "<br />";
}
表名为"tasks",两列为"task"(varchar255)和"check"(int11)
即时问题
为什么什么都没有显示?很可能您有SQL错误。但你不会在任何地方打印它。
使用PHP显示mysql错误
//this is a bad query, this time it is intentional
$sql = mysql_query('SELECT tasks FROM tasks WHERE check="1"');
if($sql)
{
//do processing here, no error
while($row = mysql_fetch_array($sql))
{
echo $row['tasks'];
echo "<br />";
}
}
else
{
//output error, or handle it in any other way you like
echo mysql_error();
}
您的问题很可能是引用--更新:在多个级别上:
1级
- 双引号
"
在SQL语句中不可用对字符串常量使用单引号'
,对封闭对象名称(表、列等)使用反引号`
交换报价:
$sql = mysql_query("SELECT tasks FROM tasks WHERE check='1'");
转义引号:
$sql = mysql_query('SELECT tasks FROM tasks WHERE check=''1''');
- 您需要报价吗?这似乎是一个数值
只有数值,没有任何类型转换:
$sql = mysql_query('SELECT tasks FROM tasks WHERE check=1');
2级
check
关键字在MySQL中被保留的事实也没有帮助。您可以使用它来识别对象,但需要注意的是:正确地封装在backticks(`
)中:
$sql = mysql_query('SELECT tasks FROM tasks WHERE `check`=1');
强烈考虑
- 一劳永逸地把CCD_ 7抛在身后。弃用!不安全!龙来了!
- 最好是通过准备好的语句正确使用PDO
- 阅读SQL注入。这在任何一天都可能是坏消息。
- 最好是通过准备好的语句正确使用PDO
同意,正如佩特卡所说,你根本不需要报价:
$sql = mysql_query('SELECT tasks FROM tasks WHERE check=1');
还要考虑使用引号将防止查询跟随"check"列的最终索引。
您真的应该使用mysqli
但是你可以试试SELECT tasks FROM tasks WHERE check = 1
,
$sql = mysql_query("SELECT tasks FROM tasks WHERE check='1'");
while($row = mysql_fetch_array($sql))
{
echo $row['tasks'];
echo "<br />";
}