【问题标题】:SQL syntax errors when using php echo $_SERVER['PHP_SELF'];使用 php echo $_SERVER['PHP_SELF'] 时出现 SQL 语法错误;
【发布时间】:2009-12-30 15:59:35
【问题描述】:

我正在尝试使用 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);
?>

【问题讨论】:

  • 您应该考虑编写一个较小的脚本来显示该问题。
  • 我不太确定问题是什么:(

标签: php mysql


【解决方案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

,您可以使用任何查询工具轻松重现。

【讨论】:

  • 谢谢伙计...现在我只需要弄清楚为什么空 id 一直被传递!
  • @jeansymolanza: 祝你好运! :)
【解决方案2】:

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

寻找你的每一行

mysql_query($query_someQuery, $speedycms)

在每一行之前,添加类似的语句

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

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

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

【讨论】:

  • 谢谢...原来 id 没有通过!我真的很感谢你的帮助。新年快乐!
【解决方案3】:

您确定问题出在您使用“php echo $_SERVER['PHP_SELF']”时吗? 抛出的错误是 SQL 语法错误,与调用 php echo $_SERVER['PHP_SELF'] 无关。

错误说“在第 1 行”这一事实非常无用,因为它意味着在 SQL 语法的第一行,而不是特定页面,因此并没有真正指出调用查询的位置。

【讨论】:

  • 是的,id 没有通过!
【解决方案4】:

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

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

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

【讨论】:

  • 每次我提交表单时,client_id 都会丢失
  • 每次提交表单时都没有传递 id...为什么?
  • 我没有看到您通过 URL 设置 $_GET['id'] 变量的位置...我看到的只是:“accesscheck=”。 urlencode($MM_referrer);这将设置 $_GET['accesscheck']。还可以尝试回显 $MM_restrictGoTo 以查看 URL 是否格式正确。
猜你喜欢
  • 1970-01-01
  • 2019-04-01
  • 2016-05-19
  • 1970-01-01
  • 1970-01-01
  • 2012-10-06
  • 2019-07-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多