2013-02-07 33 views
0

我在驗證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(); 

回答

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的記錄,你可以利用先前查詢資源來獲取第r用相應的數據返回短網址。

+0

感謝您的回答我只是選擇重新寫清整個PDO中的清單。現在工作正常 – 10010010001011101111