Php MySQL默认值未按预期工作
你好,来自SO的朋友们强> 这段代码以前是有效的,但当我克隆数据库时,它似乎停止了工作。有一个名为maps的表,它有一些默认值,比如max。据我所知,如果我的INSERT代码没有值,那么将使用dafault值 这就是我正在做的: 这些值可能存在,也可能不存在。Php MySQL默认值未按预期工作,php,mysql,insert,default-value,Php,Mysql,Insert,Default Value,你好,来自SO的朋友们 这段代码以前是有效的,但当我克隆数据库时,它似乎停止了工作。有一个名为maps的表,它有一些默认值,比如max。据我所知,如果我的INSERT代码没有值,那么将使用dafault值 这就是我正在做的: 这些值可能存在,也可能不存在。 $scan->maximo_exploracion = addslashes($_GET['scan_maximo_exploracion']); $scan->proceso_analisis = addslashes($_
$scan->maximo_exploracion = addslashes($_GET['scan_maximo_exploracion']);
$scan->proceso_analisis = addslashes($_GET['scan_proceso_analisis']);
$scan->email_user = addslashes($_GET['scan_email_user']);
$scan->email_owner = addslashes($_GET['scan_email_owner']);
然后:
db_ask($db_resonance_slave, "
INSERT INTO mapas
SET
usuario_id = '$user->id',
maximo_exploracion = '$scan->maximo_exploracion',
proceso_analisis = '$scan->proceso_analisis',
email_user = '$scan->email_user',
email_owner = '$scan->email_owner',
max_proc = '5',
proceso_exploracion = 'esperando',
direccion = '$scan->address',
dominio = '$scan->dominio',
dominio_id = '$dominio->id',
server_address = '$scan->server_address',
server_zone = '$scan->zone_name',
server_zone_code = '$scan->zone_code',
server_response_speed = '$scan->server_response_speed'
");
CREATE TABLE `mapas` (
`id` INT(12) NOT NULL AUTO_INCREMENT,
`usuario_id` VARCHAR(256) NOT NULL,
`maximo_exploracion` VARCHAR(256) NOT NULL DEFAULT '100',
`max_proc` VARCHAR(256) NOT NULL,
`open_proc` VARCHAR(256) NOT NULL,
`hora_lanzado` VARCHAR(256) NOT NULL,
`direccion` VARCHAR(256) NOT NULL,
`dominio` VARCHAR(256) NOT NULL,
`dominio_id` VARCHAR(256) NOT NULL,
`idioma` VARCHAR(256) NOT NULL,
`server_address` VARCHAR(256) NOT NULL,
`server_zone` VARCHAR(256) NOT NULL,
`server_zone_code` VARCHAR(256) NOT NULL,
`server_response_speed` VARCHAR(256) NOT NULL,
`proceso_exploracion` VARCHAR(256) NOT NULL DEFAULT 'esperando',
`proceso_analisis` VARCHAR(256) NOT NULL DEFAULT 'esperando',
`email_owner` VARCHAR(256) NOT NULL DEFAULT 'False',
`email_user` VARCHAR(256) NOT NULL DEFAULT 'True',
`eliminado` INT(12) NOT NULL DEFAULT '0',
`creacion` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
)
现在,几天前,使用相同的代码,如果$scan->maximo_exploracion没有任何信息,记录将以默认值100插入
此时此刻,它显得空白。当然,这也造成了问题
有什么想法吗
谢谢!
克里斯
表格:
db_ask($db_resonance_slave, "
INSERT INTO mapas
SET
usuario_id = '$user->id',
maximo_exploracion = '$scan->maximo_exploracion',
proceso_analisis = '$scan->proceso_analisis',
email_user = '$scan->email_user',
email_owner = '$scan->email_owner',
max_proc = '5',
proceso_exploracion = 'esperando',
direccion = '$scan->address',
dominio = '$scan->dominio',
dominio_id = '$dominio->id',
server_address = '$scan->server_address',
server_zone = '$scan->zone_name',
server_zone_code = '$scan->zone_code',
server_response_speed = '$scan->server_response_speed'
");
CREATE TABLE `mapas` (
`id` INT(12) NOT NULL AUTO_INCREMENT,
`usuario_id` VARCHAR(256) NOT NULL,
`maximo_exploracion` VARCHAR(256) NOT NULL DEFAULT '100',
`max_proc` VARCHAR(256) NOT NULL,
`open_proc` VARCHAR(256) NOT NULL,
`hora_lanzado` VARCHAR(256) NOT NULL,
`direccion` VARCHAR(256) NOT NULL,
`dominio` VARCHAR(256) NOT NULL,
`dominio_id` VARCHAR(256) NOT NULL,
`idioma` VARCHAR(256) NOT NULL,
`server_address` VARCHAR(256) NOT NULL,
`server_zone` VARCHAR(256) NOT NULL,
`server_zone_code` VARCHAR(256) NOT NULL,
`server_response_speed` VARCHAR(256) NOT NULL,
`proceso_exploracion` VARCHAR(256) NOT NULL DEFAULT 'esperando',
`proceso_analisis` VARCHAR(256) NOT NULL DEFAULT 'esperando',
`email_owner` VARCHAR(256) NOT NULL DEFAULT 'False',
`email_user` VARCHAR(256) NOT NULL DEFAULT 'True',
`eliminado` INT(12) NOT NULL DEFAULT '0',
`creacion` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
)
评论说:‘阿尔马塞纳·马帕斯(Almacena mapas,los mapas son ordenes de exploración y aálisis)是多米尼克特别行政区的一员。’
校对='latin1\u swedish\u ci'
引擎=InnoDB 正如注释中所建议的,您传递的是空白而不是NULL。试试这个:
if (isset($_GET['scan_maximo_exploracion']) && $_GET['scan_maximo_exploracion']) {
$scan->maximo_exploracion = addslashes($_GET['scan_maximo_exploracion']);
}
也许:
它表示使用扩展insert(在insert语句中指定多行)可以绕过此默认值;将提供警告,而不是错误。但是单insert语句会抛出一个错误
目前可以通过以下方法避免这种情况:
Set sql_mode = "strict_all_tables";
然后使用默认关键字,它将插入该列的默认值。如果您所更改的都是DB端的,为什么不发布有关DB端的所有信息呢?fancyPants先生/小姐,这绝对合乎逻辑,我刚才就是这么做的。这是从克隆的数据库还是从原始数据库来的?只是想确定一下……因为我没想到会这样,我把原来的那个拿走了。这来自克隆数据库。这是一个网络爬虫的片段,因为它变得太大了,我划分了数据库,创建了一个主/从方案。但是,现在正在执行此行为…我怀疑您的脚本正在将maximo_exploracion设置为空而不是空。由于blank不为null,因此它不会插入默认值。感谢您的帮助,奥利,我不确定,但由于$\u GET['scan\u maximo\u exploracion']根本没有赋值,因此表示法$scan->maximo\u exploracion应该为null,而不是空的。我想保持PHP的原样,因为我知道它的功能。。。或者,过去是这样。然而,像您这样的方法可能是——如果($scan->maximo_exploracion==''){unset($scan->maximo_exploracion);}addslashes()将返回一个字符串,而不管$\u GET now.addslashes()的内容是什么。addslashes()已删除-(kids:on development environment environment just for testing proposites)并且它的行为仍然相同,则变量是100%清除的,MySQL的行为也不符合预期。当你从db_ask()中删除“maximo_exploracion='$scan->maximo_exploracion'”时会发生什么?根据第二个问题的帖子。。。这并没有解决问题: