这是针对数据导入脚本,我想检查具有父ID的类别名称是否已存在;如果确实如此,则不需要将其添加到数据库中。但我的检查并未停止重复输入。
$i = 1;
$check = FALSE;
echo'<br>';
do{
//Turn import order into Colewood order.
$tieroffset = $i - 1;
$tier = $csvdata[$r][$fields["Tier" . $i]];
$query = ("SELECT name FROM base_categories WHERE name = '".$tier."' AND id = '".$tieroffset."'");
$result = mysql_query($query);
$result_array = mysql_fetch_array($result);
if (empty($result_array)) {
if($tier != null){
$queryInsert = "INSERT INTO base_categories (parent_id,name)
VALUES ('" . $tieroffset . "', '" . mysql_real_escape_string($csvdata[$r][$fields["Tier" . $i]]) . "')";
}
mysql_query($queryInsert);
print_r($queryInsert);
}
$i++;
}while ($i <= 6 || $check != FALSE);
echo' >>>END PRODUCT<br>';
答案 0 :(得分:2)
使用mysql_num_rows函数检查查询返回的行数。
if (empty($result_array)) {
到
if (mysql_num_rows($result) == 0 ) {
答案 1 :(得分:0)
mysql_fetch_array
会返回 FALSE
并始终使用mysql_real_escape_string或PDO来避免 SQL注入。< / p>
$result = mysql_query($query);
if($result)
{
if(($result_array = mysql_fetch_array($result)) //while
{
//code
}
}
答案 2 :(得分:0)
首先回答一个小问题:
如果您的{parent_id,name}组合不能包含重复内容,为什么它们不是唯一约束?
如果你添加,你肯定永远不会在这两列中获得重复的密钥。如果他们只是colums你也可以把它们作为主键。
接下来,如果你已经完成了,只需一个查询即可满足
$query = "INSERT INTO base_categories (parent_id, name) VALUES('" .
$tieroffset . "', '" .
mysql_real_escape_string($csvdata[$r][$fields["Tier" . $i]]) . "')
ON DUPLICATE KEY UPDATE name = name;
ON DUPLICATE KEY UPDATE在UNIQUE约束或PRIMARY KEY约束失败时更新旧记录。这样,您只需运行一个查询而不是两个。