大家好,我试了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;
}
}
答案 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;
}