我在验证mysql中的重复条目时遇到了一些问题,而不是返回与已经缩短的记录相关的链接,它会创建一个新的记录,不知道为什么会发生这种情况?这是代码
$url = get_magic_quotes_gpc() ? stripslashes(trim($_REQUEST['cf_url'])) : trim($_REQUEST['cf_url']);
function remove_http($url) {
$disallowed = array('http://', 'https://');
foreach($disallowed as $d) {
if(strpos($url, $d) === 0) {
return str_replace($d, '', $url);
}
}
return $url;
}
$id = rand(10000,99999);
$short = base_convert($id, 20, 36);
$short_url = $short;
$private_url = md5($short);
$result = mysql_query("SELECT * FROM ' . DB_TABLE . ' WHERE original_url = ".mysql_real_escape_string(remove_http($url))."");
$num_rows = mysql_num_rows($result);
if ($num_rows > 0) {
$results = mysql_query("SELECT * FROM ' . DB_TABLE . ' WHERE original_url = ".mysql_real_escape_string(remove_http($url))."");
$object = mysql_fetch_assoc($results);
echo "http://" . BASE_HREF . $object['short_url'];
} else {
mysql_query('LOCK TABLES ' . DB_TABLE . ' WRITE;');
mysql_query('INSERT INTO ' . DB_TABLE . ' (original_url, short_url, private_url, created_on, created_by) VALUES ("' .mysql_real_escape_string(remove_http($url)) . '", "' . $short_url . '", "' . $private_url . '", "' . time() . '", "' . mysql_real_escape_string($_SERVER['REMOTE_ADDR']) . '")');
mysql_query('UNLOCK TABLES');
echo "http://" . BASE_HREF . $short_url;
}
mysql_close();
答案 0 :(得分:1)
我认为您的查询可能在以下代码中的第一个实例失败
$result = mysql_query("SELECT * FROM ' . DB_TABLE .
' WHERE original_url = ".mysql_real_escape_string(remove_http($url))."");
$num_rows = mysql_num_rows($result);
因为您的original_url值为string
,所以您应该使用单/双引号传递,请尝试使用以下代码
$result = mysql_query("SELECT * FROM " . DB_TABLE .
" WHERE original_url = '".mysql_real_escape_string(remove_http($url))."'")
or die("Error in SQL ".myql_error());
$num_rows = mysql_num_rows($result);
如果找到记录>您也无需检索相同的数据。 0,您可以利用先前查询的资源来获取所需数据以返回短URL。
答案 1 :(得分:0)
由于mysql_ *的中断,我重写了PDO中的所有内容现在工作正常。