我在运行此查询时遇到问题。我一直在收到错误:
您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在'read ='附近使用正确的语法'在第1行使用WHERE user_id ='1'LIMIT 1'
代码
$conn = mysql_connect('localhost', 'admin', 'root') or die(mysql_error());
mysql_select_db('main') or die(mysql_error());
$read = "message read";
$set_statuss = "UPDATE inbox ".
"SET read = '".$read."' ".
"WHERE user_id = '".$_SESSION['user_id']."' ".
"LIMIT 1";
编辑:这是表格:
CREATE TABLE `inbox` (
`inbox_id` int(5) NOT NULL auto_increment,
`posted_to` int(5) NOT NULL,
`posted_by` int(5) NOT NULL,
`subject` text NOT NULL,
`message` text NOT NULL,
`date_posted` datetime NOT NULL,
`read` text NOT NULL,
PRIMARY KEY (`inbox_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
编辑:更新了查询,但现在PHP只显示为白色..
$read = "read";
$set_statuss = "UPDATE inbox ".
"SET read = '".$read."' ".
"WHERE posted_to = '{$_SESSION['user_id']}' AND inbox_id = '".$_GET['msg_id'];."' ";
mysql_query($set_statuss) or die(mysql_error() . $set_statuss);
地址栏中的网址:
http://localhost:8888/wmin/msg.php?user_id=1&msg_id=2
有谁知道我哪里出错了?谢谢!
答案 0 :(得分:4)
我认为它可能会将read
作为一个关键字,尝试使用它,即使用“反引号”(很难用SO的降价语言表达;)。
答案 1 :(得分:1)
首先,如果您使用heredoc,它将使您的代码更易于阅读。另一方面,为什么要将此限制为1行?你怎么知道你正在更新哪一行?
您应该报告mysql_query()
来电中的错误,看看到底出了什么问题。我假设$_SESSION['user_id']
是一个数字?如果未定义查询将失败,这就是您应该记录和/或报告错误和 SQL的原因。
$conn = mysql_connect('localhost', 'admin', 'root') or die(mysql_error());
mysql_select_db('main') or die(mysql_error());
$read = "message read";
$sql = <<<END
UPDATE inbox
SET read = `$read`
WHERE user_id = $_SESSION[user_id]
END;
mysql_query($sql) or die(mysql_error() . ': ' . $sql);
答案 2 :(得分:0)
出于安全考虑,我建议您使用sprintf函数传递参数。
$q = sprintf("UPDATE inbox SET `read` = '%s' WHERE `user_id` = %d LIMIT 1",
$read, $_SESSION['user_id']);
答案 3 :(得分:0)
嘿伙计们弄清楚出了什么问题:
$read = "message read";
$set_statuss = "UPDATE inbox ".
"SET readd = '".$read."' ".
// changed $_SESSION to $_GET and the ';' after msg_id GET
"WHERE posted_to = '{$_SESSION['user_id']}' AND inbox_id = '".$_GET['msg_id'];."' ";
mysql_query($set_statuss) or die(mysql_error() . $set_statuss);
谢谢大家!