我正在尝试将具有大约1990个字符的表单中的数据插入到mysql中。插件如何不工作。当我var_damp时,变量的内容显示正确的内容。当我将它设置为空字符串时插入工作。我做了我的研究,仍然无法工作。我不是要上传文件。这个字符来自我表单中的textarea。
下面是插入代码:
if (isset($_POST['val'])) {
$score = $_POST['val'];
$course = $_POST['course'];
$mysqli->query("INSERT INTO `evaluate` (`id`, `course`, `score`) VALUES (Null, '$course', '$score')");
注意:得分列在数据库中的类型为TEXT。
答案 0 :(得分:1)
这是一个常见问题,因为大多数mysqli
的介绍都不会立即报道,即使它应该是您学习的第一件事。插入任何数据库,尤其是SQL,需要仔细转义您提供的值。这些转发的方式因平台而异,但好消息是mysqli
可以为您处理。
关键是使用prepared statements:
$stmt = $mysqli->prepare("INSERT INTO evaluate (course, score) VALUES (?,?)");
$stmt->bind_param('ss', $_POST['course'], $_POST['val']);
$stmt->execute();
现在enable exceptions最好,这样就不会忽略任何错误。偶尔我们都会犯一些小错误,如果没有任何关于它们的警告,可能会很难找到。例外会产生很多噪音。
如果您刚开始使用PHP和数据库,您可能希望使用PDO进行评估,这明显优于mysqli
,原因有很多,或者更高级别的数据库层比如Doctrine或
Propel使得使用数据库变得更加愉快。
答案 1 :(得分:0)
我在文本中有一个引号(')而没有转义它意味着SQL语句被错误地解释
正确的方法是,你必须始终这样做:
$score = $mysqli->real_escape_string($_POST['val']);
$course = $mysqli->real_escape_string($_POST['course']);
$mysqli->query("INSERT INTO
评估(
ID ,
课程,
得分)VALUES (Null, '$course', '$score')");