查看与MySQL服务器版本对应的手册

时间:2014-05-30 05:10:03

标签: php mysql

无法弄清楚此代码存在的问题

不断收到错误

  

注意:第10行的C:\ wamp \ www \ myProject \ editProfile \ edit_save.php中的未定义索引:userID

  

无法运行查询:您的SQL语法出错;查看与您的MySQL服务器版本对应的手册,以便在#1;(UserID,matrix_num,student,username,town,email,txtFavorite,noDate,txtMobil'第1行)附近使用正确的语法

if($_GET) {
$noEdit = $_POST[''];
              //"SELECT *FROM "
$sql        = "SELECT * FROM tblmyprofile where student='$name', username='$username', matrix_num='$matric', town='$town' and                   mail='$email'";
$query      = mysql_query($sql, $masuk,$boleh) or die ("Gagal query".mysql_error());
$data       = mysql_fetch_array($query);
}

1 个答案:

答案 0 :(得分:2)

WHERE子句中的逗号运算符无效。

您似乎想要逻辑ANDOR运算符。查询形式如下:

SELECT t.* 
  FROM tblmyprofile t
 WHERE t.student = 'fee'
   AND t.username = 'fi'
   AND t.matrix_num = 'fo'
   AND t.town = 'fum'
   AND t.mail = 'foo'

但这对于SQL查询来说是一个非常奇怪的构造;没有什么是无效的。但通常情况下,使用SELECT,我们通常打算根据一些谓词检索行,然后从行中获取值。

对于SQL查询的调试问题,将打算发送到数据库的SQL文本串起来,然后回显(或printf或vardump)字符串通常是一个好主意,例如

$sql = "SELECT col, expr, col FROM mytable WHERE col = 'abc'";
echo $sql;

然后,在调用中引用$sql来解析并执行SQL语句。

我相信您遇到的部分问题可能是构造包含SQL文本的字符串。有些语言在字符串文字中包含变量和引号是不切实际的。

e.g。

$sql = " WHERE t.fee = '" . mysql_real_escape_string($foo) . "'"
     . " AND t.fi = '" . mysql_real_escape_string($bar) . "'"
     . ...  ;

再次,在将SQL文本放在一起之后,将其回显用于调试,并验证它是否是您要发送到数据库的字符串。


另请注意,不推荐使用 mysql _ 界面。新开发应使用 mysqli _ PDO 。另请注意,在SQL文本中包含任何不安全的变量都可能导致SQL注入漏洞。要么"逃避"您在SQL文本中包含的变量中的特殊字符,或者更好的是,使用带有绑定参数的预准备语句,以避免SQL注入。