-1

我正在尝试使用两个表单变量 $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

谢谢

4

3 回答 3

0

像这样将 %s 放在单引号中

"SELECT * FROM VW_reg vwr WHERE vwr.sessionID='%s' AND vwr.semesterID='%s'",$sessionID,$semesterID);
于 2013-05-15T13:19:26.110 回答
0

我认为你应该用单引号括起你的变量,''请更改如下

"SELECT * FROM VW_reg vwr WHERE vwr.sessionID='%s' AND vwr.semesterID='%s'"
于 2013-05-15T13:20:03.993 回答
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没有设置,这也可能导致一些问题

于 2013-05-15T13:27:59.357 回答