我正在尝试使用两个表单变量(即$ sessionID和$ semesterID)从mysql表中获取结果。我使用了以下代码,似乎在sql语法中有错误
<?php
...
mysql_select_db($database_connChePortal, $connChePortal);
$query_rsRegcourses =sprintf("SELECT * FROM VW_reg vwr WHERE vwr.sessionID=%s AND vwr.semesterID=%s",$sessionID,$semesterID);
$rsRegcourses = mysql_query($query_rsRegcourses, $connChePortal) or die(mysql_error());
$row_rsRegcourses = mysql_fetch_assoc($rsRegcourses);
$totalRows_rsRegcourses = mysql_num_rows($rsRegcourses);
print_r($query_rsRegcourses); die;
...
?>
我尝试运行查询,但我有以下错误报告
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND vwr.semesterID=' at line 1
感谢
答案 0 :(得分:0)
将%s放在单引号中,如下所示
"SELECT * FROM VW_reg vwr WHERE vwr.sessionID='%s' AND vwr.semesterID='%s'",$sessionID,$semesterID);
答案 1 :(得分:0)
我认为你应该用单引号''
包围你的变量,请按以下方式更改
"SELECT * FROM VW_reg vwr WHERE vwr.sessionID='%s' AND vwr.semesterID='%s'"
答案 2 :(得分:0)
要在查询中插入变量,您必须正确格式化 另外两个答案包含不正确的格式 - 所以,你不应该遵循它们。
为了使格式更方便,您必须将sprintf()
封装到这样的函数中:
function paraQuery()
{
$args = func_get_args();
$query = array_shift($args);
$query = str_replace("%s","'%s'",$query);
foreach ($args as $key => $val)
{
$args[$key] = mysql_real_escape_string($val);
}
$query = vsprintf($query, $args);
$result = mysql_query($query);
if (!$result)
{
throw new Exception(mysql_error()." [$query]");
}
return $result;
}
将应用正确的格式并且还将处理错误
另请注意,您对记录进行计数的方式效率极低,可能会导致服务器挂起。您必须查询所需的唯一数据。因此,如果您只需要计数 - 仅请求计数
所以,代码将是
mysql_select_db($database_connChePortal, $connChePortal);
$sql = "SELECT count(*) FROM VW_reg vwr WHERE vwr.sessionID=%s AND vwr.semesterID=%s";
$res = paraQuery($sql,$sessionID,$semesterID);
$row = mysql_fetch_row($res);
print_r($row[0]); die;
它将使您的查询格式正确,因此无法使用SQL注入
此外,似乎$semesterID
未设置,这可能会导致一些问题