2012-06-17 72 views
0

我想看看我的sqlite數據庫中是否有現有的行,如果沒有添加它。但是我的查詢出了問題。我希望有人能夠發現我的錯誤。php sqlite檢查行是否存在

我特別瘦的誤差在查詢行:

$query = 'SELECT * FROM plant WHERE common_Name = '. $commonName . ' AND latin_Name = '. $latinName . 'AND url = '. $URL ; 

謝謝 託德

// set path of database file 
$file = "db/plants.db"; 

// create database object 
$db = new SQLiteDatabase($file) or die("Could not open database"); 

// see if the EXACT same tag exists 
$query = 'SELECT * FROM plant WHERE common_Name = '. $commonName . ' AND latin_Name = '. $latinName . 'AND url = '. $URL ; 
$result = $db->query($query) or die("Error in query"); 
$rows = sqlite_num_rows($result); 


if($rows>0) return; //do not add it 

// generate query string 
$query = 'INSERT INTO plant (common_Name, latin_Name, url) VALUES("'.$commonName.'","'. $latinName.'","'.$URL.'")'; 

// execute query 
// return result object 
$result = $db->query($query) or die("Error in query"); 


// destroy database object 
unset($db); 
+0

這應該回答你的問題:http://stackoverflow.com/questions/531035/how-to-do-if-not-exists-in-sqlite –

+0

你試過對象 - 面向風格?即$ rows = $ result-> numRows();不知道它是否會有所作爲... –

+0

@ Inner-Design:我是新來的sqllite,並且正在慢慢地學習OOP sqlite api。 – maddogandnoriko

回答

2

你錯過了你的SELECT查詢報價,所以它的失敗。

$query = "SELECT * FROM plant WHERE common_Name = '$commonName' AND latin_Name = '$latinName' AND url='$URL'"; 
     ^         ^  ^etc... 

請注意指示的引用更改和格式差異。另外,除非您在代碼片段之外的其他地方完成,否則請注意,此類查詢構造容易受到SQL injection attacks的攻擊,您應該在繼續使用此代碼之前閱讀並瞭解這些內容。

下一次你把一個錯誤處理程序(順便檢查返回值的榮譽),不要只輸出一個靜態的「出錯了」錯誤信息。這對診斷無用。數據庫可以準確地告訴你出了什麼問題,所以輸出數據庫的錯誤信息,例如。 sqlite_error_message()

+0

比我的答案要乾淨得多......謝謝。 – maddogandnoriko

+0

並且還要感謝注射攻擊的鏈接。 – maddogandnoriko

+0

你是不是指sqlite_error_string?我無法在sqlite_error_message上找到任何文檔。 – maddogandnoriko

0

我不想回答我的問題,但是....

我錯過了周圍的parameters.Here雙引號是一個可行的查詢。

$query = 'SELECT * FROM plant WHERE common_Name ="'. $commonName .'" AND latin_Name = "'.$latinName .'" AND url = "'.$URL.'"'; 

託德