我有一个普通的HTML文件,它提供了一个字符串。 POST到我的PHP文件,将它放到MySQL数据库中。
我如何实现我能写出真实的"数据库中的NULL
而不是" " (一个空字符串)或类似的东西?
MySQL列可以为空。
我的表格:
<form method="post" action="putInDatabase.php">
<label>Text</label>
<textarea name="text" ></textarea>
<label>Picture URL (optional)</label>
<input name="image" />
<br>
<input id="submit" name="submit" type="submit" value="submit">
</form>
我的PHP文件:
<?php
$text = "";
$image = null;
if (isset($_POST["submit"]))
{
$text = $_POST["text"];
$image = $_POST["image"];
}
$text = strtr ($text, array ('"' => '\"'));
$con = mysql_connect("censored :)");
if (!$con)
{
die('ERROR' . mysql_error());
}
mysql_select_db("_DATABASE_HERE_", $con);
$insertSQL = "INSERT INTO `_DATABASE_HERE_`.`_NAME_HERE_` (`Text`, `PictureURL`) VALUES ('$text', '$image ');";
$res = mysql_query($insertSQL);
$res = mysql_query($sql);
mysql_close($con);
echo "Success!";
?>
答案 0 :(得分:2)
您需要预处理文字。由于你很容易受到sql injection attacks的攻击,因此这应该被认为是强制性的:
if (isset($_POST['text']) && !empty($_POST['text'])) {
$safetext = "'" . mysql_real_escape_string($_POST['text']) . "'";
} else {
$safetext = 'null';
}
$sql = "INSERT ... VALUES ($safetext, ...)";
注意如何在if()
内添加引号。如果有一些文本需要完成,则sql-escaped文本被引号括起来。如果根本没有文字,则添加字符串null
。这归结为null
和'null'
之间的差异。
null
是一个sql null,&#34;未知值&#34;。 'null'
是一个字符串,其中包含文字字符n
,u
,l
和l
。在SQL术语中,它们是两个完全不同的东西。
上面的代码会生成
INSERT ... VALUES (null, ...)
INSERT ... VALUES ('Miles O\'Brien', ...)
答案 1 :(得分:0)
试试这个:
$variable_name = "NULL";
现在,在插入数据库时,请使用$ variable_name。
应该这样做。
编辑:如果您将来要切换到PDO或者逃避用户输入,您需要使用准备语句。