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子句`