Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 即使检测到是否存在多个DB插入?_Php_Mysql_Wordpress - Fatal编程技术网

Php 即使检测到是否存在多个DB插入?

Php 即使检测到是否存在多个DB插入?,php,mysql,wordpress,Php,Mysql,Wordpress,我有一个php脚本,可以监听$u POST输入,并将其插入到我的表中,然后可以在我的Wordpress插件中读取并显示给管理员。考虑到人们多次提交表单的方式,我使用表单中发送的唯一发票号检查数据库以查看条目是否已经存在 我的代码是: global $wpdb; $submits_table = $wpdb->prefix . 'submits_table'; $invoice = $_POST['invoice']; $exists = $wpdb->get_row( "SELEC

我有一个php脚本,可以监听$u POST输入,并将其插入到我的表中,然后可以在我的Wordpress插件中读取并显示给管理员。考虑到人们多次提交表单的方式,我使用表单中发送的唯一发票号检查数据库以查看条目是否已经存在

我的代码是:

global $wpdb; 
$submits_table = $wpdb->prefix . 'submits_table';
$invoice = $_POST['invoice'];
$exists = $wpdb->get_row( "SELECT * FROM $submits_table WHERE `invoice` = $invoice" );
    if ( $exists == NULL ) {

        $wpdb->insert(
            $submits_table,
                array(
                'first_name' => $_POST['first_name'],
                'ip_address' => $_POST['ipaddress'],
                'invoice' => $invoice
            ),
            array(
                '%s',
                '%s',
                '%s'
            )
        );

}
问题是,无论发票号是否已经存在,每次提交都会被插入。我在管理面板的另一个页面上尝试了相同的代码,效果很好;只有当它被设置为前端提交的侦听器时,它才能正常工作

我要把头发扯下来。关于为什么
get_row()
在前端每次都返回NULL,而不是管理员,你有什么想法吗

编辑:
invoice
是字母数字,所以它是
varchar

返回

(数组|对象| null | void)数据库查询结果,格式由指定 $output或失败时为空

因此,检查
null

相反,请检查返回结果的计数:

if (count($exists) > 0)

发票列VARCHAR或INTCHAR是否基于唯一性(是否存在)限制插入是通过在数据库级别放置
unique
约束来完成的,您不需要从PHP执行此操作。您不使用PHP的原因正是您所经历的——PHP不能强制唯一性,或者任何其他语言。只有数据库可以做到这一点。
count()
也不起作用-至少,它可以在管理页面上正确地测试重复项,但不能在我需要的前端侦听器中测试重复项。
print\r($exists)的输出是什么