我有一个insert语句,用于插入从上一页的表单POST收集的变量。如果未填写表单中的变量,则插入失败(可能是因为它插入了一个空字符串...)我将dataype设置为允许NULL值 - 如果字段为空,如何插入空值表格POST?
$query = "
INSERT INTO songs (
userid,
wavURL,
mp3URL,
genre,
songTitle,
BPM
) VALUES (
'$userid',
'$wavFile',
'$mp3File',
'$genre',
'$songTitle',
'$BPM'
)
";
$result = mysql_query($query);
答案 0 :(得分:1)
确切的方式取决于您是否将查询或绑定参数写入预准备语句。
如果自己编写,它看起来像这样:
$value = empty($_POST['bar']) ? null : $_POST['bar'];
$sql = sprintf('INSERT INTO foo (bar) VALUES (%s)',
$value === null ? 'NULL', "'".mysql_real_escape_string($value)."'");
$result = mysql_query($sql);
重点是,如果值应为null,则需要传入字符串NULL
(不带引号),如果值应为“val”,则需要传递字符串'val'
。请注意,由于我们在PHP中编写字符串文字,因此在这两种情况下,源代码中还有一对引号(这在第一种情况下会产生一对,在第二种情况下会产生两对)。
警告:直接从请求变量插入数据库时,很容易对SQL注入攻击开放。不要成为另一个受害者; read about how to protect yourself并实施一项普遍接受的解决方案。
答案 1 :(得分:0)
对于我没有填充内容时我理解的内容,post变量不会设置为空值,而是根本不设置,所以在php中你可以做例如:
$genre = isset($_POST['genre']) ? $_POST['genre'] : NULL;
答案 2 :(得分:0)
我是这样做的。我不喜欢直接从POST发送任何SQL查询(总是清理!)在下面的cas中你只是逐个运行POST变量并将它们分配给辅助数组,同时检查0个长度字符串并将它们设置为NULL。
foreach ($_POST as $key => $value) {
strlen($value)=0 ? $vars[$key] = NULL : $vars[$key] = $value
}
然后,您可以从新创建的$ vars []数组构建SQL查询。
正如Jon在上面所述,这也是在数据插入数据库之前也可以转义字符串,剥离代码并基本上完成所有服务器端验证的地方。