当同时调用多个插入查询时,避免多次插入


Avoid multiple Insertion, when insert query called multiple times at same time

$Link= mysql_connect("localhost", "root", "", "");
query = mysql_query($Link,"SELECT col_name FROM table_name WHERE col_name='$val'"); 
$num=mysql_num_rows($query);
if($num==0){   
    $query1 = mysql_query($Link,"INSERT INTO table_name(col_name)VALUES('$val')"); )
}

将有多个调用同时查询。我使用此方法避免多次插入,但有时会插入多行。请帮助我。提前谢谢。

感谢您的帮助..

我不是在循环中调用此代码,而是同时从不同用户进行多次调用。

mysql_query语法:resource mysql_query ( string $query [, resource $link_identifier = NULL ] )

 $query1 = mysql_query("INSERT INTO table_name (col_name)VALUES('".$val."')");

完整代码:

$Link= mysql_connect("localhost", "root", "", "");
$query = mysql_query($Link,"SELECT col_name FROM table_name WHERE col_name='".$val."'");
$num=mysql_num_rows($query);
if($num==0){
    $query1 = mysql_query("INSERT INTO table_name(col_name)VALUES('".$val."')");
}
如果对

托管 PHP 的 Web 服务器有多个同时请求,则选择可能不会为其中多个请求返回任何结果,然后由于每个此类请求执行插入,可能会有多个插入。

如果您运行的不是 Windows 并且只有一个 Web 服务器,则可以使用 PHP 的信号量同步对此代码的访问。

但更好的是,你能在 mysql 中对表中此列的值进行唯一约束吗?

虽然你的代码是正确的,不应该再次插入,但是

您应该向字段添加唯一键,然后使用插入忽略

"INSERT IGNORE INTO table_name(col_name)VALUES('$val')"