php sqlite检查行是否存在

时间:2012-06-17 14:09:56

标签: php sqlite

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

2 个答案:

答案 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.'"';

托德