使用表单变量进行mysql查询

时间:2013-05-15 13:18:22

标签: php mysql sql

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

感谢

3 个答案:

答案 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未设置,这可能会导致一些问题