我正在尝试查看我的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 :(得分:2)
您的SELECT查询中缺少引号,因此它失败了。
$query = "SELECT * FROM plant WHERE common_Name = '$commonName' AND latin_Name = '$latinName' AND url='$URL'";
^ ^ ^ etc...
请注意指示的报价更改和格式差异。同样,除非你已经在代码片段之外的其他地方完成了它,否则请注意这种类型的查询构造容易受到SQL injection attacks的攻击,你应该在进一步了解之前阅读并了解这些内容。代码。
下次你输入一个错误处理程序(顺便检查返回值的荣誉),不要只输出一个静态的“Something goes wrong”错误信息。这对诊断来说毫无用处。数据库可以准确地告诉您出了什么问题,因此输出数据库的错误消息,例如sqlite_error_message()
。
答案 1 :(得分:0)
我不想回答我自己的问题,但是......
我错过了参数周围的双引号。这是一个有效的查询。
$query = 'SELECT * FROM plant WHERE common_Name ="'. $commonName .'" AND latin_Name = "'.$latinName .'" AND url = "'.$URL.'"';
托德