mysql如果不是null查询没有运行

时间:2013-02-07 02:52:53

标签: php mysql

我在验证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();

2 个答案:

答案 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中的所有内容现在工作正常。