MySQL默认值无法按预期工作

时间:2014-06-30 11:12:20

标签: php mysql insert default-value

来自SO的朋友们!

此代码曾经有效,但在克隆数据库时似乎停止工作。有一个名为maps的表,它有一些默认值,比如maximum。据我所知,如果我的INSERT代码没有值,那么将使用dafault值。

这就是我正在做的事情:

这些值可能存在,因为它们可能不存在。

$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'
");

现在,几天前,使用相同的代码,如果 $ scan-> maximo_exploracion 没有任何信息,则会插入默认值为100的记录。 / p>

此刻,它显得空白。当然,这会导致问题。

有什么想法吗?

谢谢! 克里斯;


表:

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 ordenesdesexraciónyanálisisparaundominioespecífico。' COLLATE = 'latin1_swedish_ci' ENGINE = InnoDB的;

2 个答案:

答案 0 :(得分:1)

也许: http://www.noelherrick.com/blog/mysql-quirk-not-null-defaults

它表示使用扩展插入(在insert语句中指定多行),可以绕过此默认值;提供警告而不是错误。然而,单个插入语句会产生错误。

目前可以通过

来避免
Set sql_mode = "strict_all_tables"; 

然后使用default关键字,该关键字将插入该列的默认值。

答案 1 :(得分:0)

正如评论中所建议的那样,您传递的是空白而不是NULL。试试这个:

if (isset($_GET['scan_maximo_exploracion']) && $_GET['scan_maximo_exploracion']) {
    $scan->maximo_exploracion   = addslashes($_GET['scan_maximo_exploracion']);
}