0

我正在尝试查看我的 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);
4

2 回答 2

2

您在 SELECT 查询中缺少引号,因此它失败了。

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

请注意指示的报价更改和格式差异。同样,除非您在代码片段之外的其他地方完成此操作,否则请注意这种类型的查询构造容易受到SQL 注入攻击,并且您应该在进一步使用此代码之前阅读并了解这些内容。

下次你放入错误处理程序时(顺便说一句,检查返回值的荣誉),不要只输出静态的“出错了”错误消息。这对诊断毫无用处。数据库可以准确地告诉您出了什么问题,因此请输出数据库的错误消息,例如sqlite_error_message().

于 2012-06-17T14:36:21.560 回答
0

我讨厌回答我自己的问题,但是......

我错过了参数周围的双引号。这是一个有效的查询。

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

托德

于 2012-06-17T14:36:47.437 回答