PHP MYSQL - 插入时空变量失败

时间:2011-09-18 02:12:52

标签: php mysql

我有一个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);

3 个答案:

答案 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在上面所述,这也是在数据插入数据库之前也可以转义字符串,剥离代码并基本上完成所有服务器端验证的地方。