Php MYSQL语法错误
大家好,我试了三天都没能解决这个问题。这是代码,我已经检查了一遍又一遍,但没有发现任何错误。我试着在一个空白页,它的工作,但当我把它放在日历中,它有语法错误。非常感谢能提供帮助的人Php MYSQL语法错误,php,mysql,sql,Php,Mysql,Sql,大家好,我试了三天都没能解决这个问题。这是代码,我已经检查了一遍又一遍,但没有发现任何错误。我试着在一个空白页,它的工作,但当我把它放在日历中,它有语法错误。非常感谢能提供帮助的人 /** QUERY THE DATABASE FOR AN ENTRY FOR THIS DAY !! IF MATCHES FOUND, PRINT THEM !! **/ $testquery = mysql_query("SELECT orgid FROM sub WHERE userid='$userid'
/** QUERY THE DATABASE FOR AN ENTRY FOR THIS DAY !! IF MATCHES FOUND, PRINT THEM !! **/
$testquery = mysql_query("SELECT orgid FROM sub WHERE userid='$userid'");
while($row4 = mysql_fetch_assoc($testquery))
{
$org = $row4['orgid'];
echo "$org<br>";
$test2 = mysql_query("SELECT nameevent FROM event WHERE `userid`=$org AND EXTRACT(YEAR FROM startdate)='2010' AND EXTRACT(MONTH FROM startdate)='08' AND EXTRACT(DAY FROM startdate)='15'") or die(mysql_error());
while($row5=mysql_fetch_assoc($test2))
{
$namethis = $row5['nameevent'];
$calendar.=$namethis;
}
}
第一个问题:你在说什么日历 这是我的2美分:EXTRACT函数是返回字符串还是返回数字? backticks用户标识是否真的存在于查询中?试着把它们脱掉。
再见 这是一个猜测,因为您没有提供看到的错误消息,但我认为userid是一个文本字段,因此WHERE子句中的$org值需要在其周围加引号。我这样说是因为注释掉的testquery在userid字段周围有引号,尽管我知道它可以在不同的表上工作。无论如何,试试这个: 从事件中选择nameevent,其中userid='$org'和EXTRACTYEAR FROM startdate='2010'和EXTRACTMONTH FROM startdate='08'以及EXTRACTDAY FROM startdate='15'
在这种情况下,回显sql语句并使用数据库客户端运行它通常很有用。调试此类问题的第一步是打印您正在运行的acutal语句。我不懂PHP,但是你能先建立SQL,然后在调用mysql\u查询之前打印它吗 EXTRACT返回一个数字而不是字符值,因此在比较EXTRACTYEAR FROM startdate=2010时不需要单引号,但我怀疑这是否会引发与其他数据库不同的错误,但可能有一个系统配置会这样做 通过查看列/变量的名称,另一件看起来有点奇怪的事情是:首先从用户表中检索列orgid。但是您可以将其与事件表中的userid列进行比较。您不也应该使用$userid从事件表中检索吗
同样,在第一个查询中,您将在$userid周围加上单引号,而不是在事件表中的userid列上加引号。userid是数字还是字符串?数字不需要单引号。任何mysql函数都可能失败。您必须测试所有返回值,如果其中一个值指示错误,通常在函数返回false时,您的脚本必须以某种方式进行处理 例如,在你的询问中
mysql_query("SELECT orgid FROM sub WHERE userid='$userid'")
您可以在sql语句中混合一个参数。您是否保证$userid的这个值是安全的?看
您可以使用语句二将两个sql查询组合成一个
另见:
基本错误处理示例:
$mysql = mysql_connect('Fill in', 'the correct', 'values here');
if ( !$mysql ) { // some went wrong, error hanlding here
echo 'connection failed. ', mysql_error();
return;
}
$result = mysql_select_db('dbname', $mysql);
if (!$result ) {
echo 'select_db failed. ', mysql_error($mysql);
return;
}
// Is it safe to use $userid as a parmeter within an sql statement?
// see http://docs.php.net/mysql_real_escape_string
$sql = "SELECT orgid FROM sub WHERE userid='$userid'";
$testquery = mysql_query($sql, $mysql);
if (!$testquery ) {
echo 'query failed. ', mysql_error($mysql), "<br />\n";
echo 'query=<pre>', $sql, '</pre>';
return;
}
看起来在$testquery之前有一个正斜杠,但如果代码都是这样的话,很难判断。请重新粘贴并使用post编辑器中的“代码”按钮,好吗?这是“101010”按钮。您收到的语法错误是什么?发布您收到的错误消息。您可以使用`AND DATEstartdate='2010-08-15'稍微简化WHERE子句`