使用php echo $ _SERVER ['PHP_SELF']时出现SQL语法错误;

时间:2009-12-30 15:59:36

标签: php mysql

我正在尝试使用 php echo $ _SERVER ['PHP_SELF']; 向自己提交页面,但仍然收到以下错误:您的SQL语法中有错误;检查与MySQL服务器版本对应的手册,以便在第1行的''附近使用正确的语法 ....

页面上有不同的表单,我遇到了同样的问题。

可能是问题的根源是什么?

    <?php
require_once('Connections/speedycms.php'); 
$client_id = mysql_real_escape_string($_GET['id']); 

if (!isset($_SESSION)) {
  session_start();
}
$MM_authorizedUsers = "";
$MM_donotCheckaccess = "true";

// *** Restrict Access To Page: Grant or deny access to this page
function isAuthorized($strUsers, $strGroups, $UserName, $UserGroup) { 
  // For security, start by assuming the visitor is NOT authorized. 
  $isValid = False; 

  // When a visitor has logged into this site, the Session variable MM_Username set equal to their username. 
  // Therefore, we know that a user is NOT logged in if that Session variable is blank. 
  if (!empty($UserName)) { 
    // Besides being logged in, you may restrict access to only certain users based on an ID established when they login. 
    // Parse the strings into arrays. 
    $arrUsers = Explode(",", $strUsers); 
    $arrGroups = Explode(",", $strGroups); 
    if (in_array($UserName, $arrUsers)) { 
      $isValid = true; 
    } 
    // Or, you may restrict access to only certain users based on their username. 
    if (in_array($UserGroup, $arrGroups)) { 
      $isValid = true; 
    } 
    if (($strUsers == "") && true) { 
      $isValid = true; 
    } 
  } 
  return $isValid; 
}

$MM_restrictGoTo = "login.php";
if (!((isset($_SESSION['MM_Username'])) && (isAuthorized("",$MM_authorizedUsers, $_SESSION['MM_Username'], $_SESSION['MM_UserGroup'])))) {   
  $MM_qsChar = "?";
  $MM_referrer = $_SERVER['PHP_SELF'];
  if (strpos($MM_restrictGoTo, "?")) $MM_qsChar = "&";
  if (isset($QUERY_STRING) && strlen($QUERY_STRING) > 0) 
  $MM_referrer .= "?" . $QUERY_STRING;
  $MM_restrictGoTo = $MM_restrictGoTo. $MM_qsChar . "accesscheck=" . urlencode($MM_referrer);
  header("Location: ". $MM_restrictGoTo); 
  exit;
}

if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

mysql_select_db($database_speedycms, $speedycms);
$query_caseStatus = "SELECT progress FROM tbl_accident WHERE id=$client_id";
$caseStatus = mysql_query($query_caseStatus, $speedycms) or die(mysql_error());
$row_caseStatus = mysql_fetch_assoc($caseStatus);
$totalRows_caseStatus = mysql_num_rows($caseStatus);

mysql_select_db($database_speedycms, $speedycms);
$query_retrieveSolicitor = "SELECT * FROM tbl_solicitors";
$retrieveSolicitor = mysql_query($query_retrieveSolicitor, $speedycms) or die(mysql_error());
$row_retrieveSolicitor = mysql_fetch_assoc($retrieveSolicitor);
$totalRows_retrieveSolicitor = mysql_num_rows($retrieveSolicitor);

mysql_select_db($database_speedycms, $speedycms);
$query_currentSolicitor = "SELECT currentSolicitor FROM tbl_accident WHERE id=$client_id";
$currentSolicitor = mysql_query($query_currentSolicitor, $speedycms) or die(mysql_error());
$row_currentSolicitor = mysql_fetch_assoc($currentSolicitor);
$totalRows_currentSolicitor = mysql_num_rows($currentSolicitor);
?>

4 个答案:

答案 0 :(得分:1)

您的问题不是PHP_SELF。您得到的错误是因为您创建的某个SQL语句不是有效的SQL,因此MySQL服务器会拒绝它。

查找每一行

mysql_query($query_someQuery, $speedycms)

在每行之前,添加类似

的语句
echo $query_someQuery, "<br />","\n";
mysql_query($query_someQuery, $speedycms)

其中$query_someQuery是您使用的实际变量。然后运行脚本/加载页面并检查SQL。它将有一个语法错误(如果浏览器看到实际返回的内容,请务必查看源代码)。

确定语法错误后,请跟踪代码并找出生成错误SQL的原因。

答案 1 :(得分:1)

如果你使用从外部取的client_id,你应该将它括在单引号中,即使它被转义并且应该是一个整数:

SELECT progress FROM tbl_accident WHERE id='$client_id'

例如,如果脚本传递空client_id,则此查询将变为:

 SELECT progress FROM tbl_accident WHERE id=

,这是无效的SQL并导致相同的错误:

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 '' at line 1

,您可以使用任何查询工具轻松复制。

答案 2 :(得分:0)

当你使用“php echo $ _SERVER ['PHP_SELF']”时,你确定问题是什么? 引发的错误是SQL语法错误,与调用php echo $ _SERVER ['PHP_SELF']无关。

错误说“在第1行”的事实是没用的,因为它意味着在SQL语法的第一行,而不是特定的页面,所以并没有真正指出你在哪里调用查询。

答案 3 :(得分:0)

尝试在此部分之后回显$ client_id:

 $client_id = mysql_real_escape_string($_GET['id']); 

您稍后在查询中使用它,如果它出现空白或无效,则可能会生成SQL错误。