MYSQL语法错误

时间:2010-08-19 06:37:20

标签: php mysql sql

大家好,我试了3天,但我无法解决这个问题。这是代码,我一次又一次地经历了它,但我发现没有错误。我尝试了一个空白的页面,它工作,但当我把它放在日历中时,它有语法错误。万分感谢能为你提供帮助的人。

/** 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;
  }
}

4 个答案:

答案 0 :(得分:0)

第一个问题:你在谈论什么日历?

这是我的2美分:EXTRACT函数是返回字符串还是数字? 您的查询中是否真的有“反引号”(userid)?试着去除它们。 再见!

答案 1 :(得分:0)

这是一个猜测,假设您没有提供您看到的错误消息,但我认为userid是一个文本字段,因此WHERE子句中的值$ org需要它周围的引号。我说这是因为注释掉的testquery在userid字段周围有引号,虽然我很欣赏它可以在不同的表上工作。无论如何试试这个:

SELECT nameevent FROM event WHERE userid = '$ org' AND EXTRACT(年份来自startdate)='2010'和提取(月份来自startdate)='08'和EXTRACT( DAY FROM startdate)='15'

在这种情况下,回显sql语句并使用数据库客户端

运行它通常很有用

答案 2 :(得分:0)

调试这样的问题的第一步是打印出你正在运行的acutal语句。我不知道PHP,但是你可以先建立SQL然后在调用mysql_query()之前打印它吗?

EXTRACT()返回的数字不是字符值,因此在比较EXTRACT(YEAR FROM startdate) = 2010时不需要单引号,但我怀疑这会引发错误(与其他数据库不同)但可能存在错误执行此操作的系统配置。

通过查看列/变量的名称看起来有点奇怪:您首先从用户表中检索列orgid。但是,将它与事件表中的userid列进行比较。您是否也应该使用$ userid从事件表中检索?

同样在第一个查询中,您在$ userid周围放置单引号,而不是为事件表中的userid列执行此操作。 userid是数字还是字符串?数字不需要单引号。

答案 3 :(得分:0)

任何mysql_ *函数都可能失败。您必须测试所有返回值,如果其中一个指示错误(通常在函数返回false时),您的脚本必须以某种方式处理它。


E.g。在您的查询中

mysql_query("SELECT orgid FROM sub WHERE userid='$userid'")

将参数混合到sql语句中。您是否确定此值($ userid的值)是否可以用于此目的?见http://en.wikipedia.org/wiki/SQL_injection


您可以使用JOIN语句将两个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;
}