2016-04-23 42 views
-5

我试图从拥有大约1990年字符到MySQL形式插入数据。如何插入不工作。当我var_damp变量的内容显示正确的内容。当我将它设置为一个空字符串插入的作品。我已经完成了我的研究,但仍然无法工作。我不想上传文件。这些字符来自我形式的textarea。PHP:如何将大量表单数据插入到mysql的

下面是插入代码:

if (isset($_POST['val'])) { 
    $score = $_POST['val']; 
    $course = $_POST['course']; 
    $mysqli->query("INSERT INTO `evaluate` (`id`, `course`, `score`) VALUES (Null, '$course', '$score')"); 

注:是得分列已在数据库类型的文本。

+5

您的代码很容易受到SQL注入,在这种情况下,你可能实际上是SQL注入意外自己。你的长字符串是否恰好包含单引号(''')字符? – Chris

+0

你为什么不逃避长串? http://php.net/manual/es/mysqli.real-escape-string.php –

+0

是的,我刚才看到你向我指出它后 – spirit

回答

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和数据库,您可能希望使用PDOmysqli的一些原因,或像DoctrinePropel更高级别的数据库层使用,这使得显著更好地评估数据库更令人愉快。

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

+1

做到这一点的最佳方法是使用['bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php),而不是由手动逸出。诸如'$ score'之类的东西不应该出现在查询中,因为它所需要的只是一个错误而且很脆弱。通过使用占位符解决这个问题,并且你永久解决了这个问题。 – tadman

+0

采取@tadman的建议和好运 – Drew

+1

@tadman您的建议是采取。谢谢 – spirit