我有一个特别令人费解的问题。
我正在使用PHP循环记录集,然后确定另一个表中是否存在电子邮件地址。
代码一切正常,直到它到达一个特定的电子邮件地址,我不能为我的生活看到错误。
电子邮件地址是marcodambrosio@domain.com。我收到以下错误:
您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以便在第1行的“ambro”附近使用正确的语法
所有其他电子邮件地址都没问题。
我回应了查询
SELECT * FROM user_details WHERE email='marcodambrosio@domain.com'
并在Navicat中运行它可以正常工作
PHP代码如下:
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;
}
}
/*Get source data*/
mysql_select_db($database, $link);
$query_clients = "SELECT email FROM clients ORDER BY client_id DESC";
$clients = mysql_query($query_clients, $link) or die(mysql_error());
$row_clients = mysql_fetch_assoc($clients);
$totalRows_clients = mysql_num_rows($clients);
do {
/*Check table to see if email already exists*/
$query_check = sprintf("SELECT * FROM user_details WHERE email=%s",GetSQLValueString($row_clients['email'],"text"));
echo "<br>".$query_check."<br>";
$check = mysql_query($query_check, $link) or die(mysql_error());
if (mysql_num_rows($check)==0) {
$query_insertUsers = sprintf("INSERT INTO users (username, password, userlevel) VALUES (%s, %s, 1)", $username, $password);
echo $query_insertUsers."<br>";
//$insertUsers = mysql_query($query_insertUsers, $link) or die(mysql_error());
}
} while ($row_clients = mysql_fetch_assoc($clients));
mysql_free_result($clients);
正如我所说 - 这段代码可行,只有在尝试使用这一个电子邮件地址进行查询时才会失败。
答案 0 :(得分:3)
这似乎是以某种方式逃避错误:right syntax to use near 'ambro''
似乎表明电子邮件可能实际上是marcod'ambrosio@domain.com
。如果你这样做
echo "<br>".$query_check."<br>";
并在Navicat中运行 ,是否有相同的错误?
答案 1 :(得分:1)
运行以下查询:
SELECT * FROM user_details WHERE email LIKE 'marco%'
我愿意打赌你在数据库中实际拥有的是marcod'ambrosio@domain.com
(请注意'包含')。这可能发生在某种自动生成电子邮件地址期间。
答案 2 :(得分:0)
你确定电子邮件在引号内吗?