假设您的形式是正确的,它是发布要你的脚本中的值。
(你洒你的代码echo
,以确保这样的话?)
将数据发送到一个SQL语句,因此到MySQL的最简单可靠的方法是使用准备好的语句。
到这里看看:http://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php
基本上你写它没有你的变量的SQL语句(与?
代替),然后告诉MySQL与你的变量之后执行语句。它避免了逃避字符串的需要,并且担心如何构建事物。
举个例子,你可能有:
// Connect to mysql
$mysqli = new mysqli('where your server is', 'my_user', 'my_password', 'world');
// Build the initial statement - easier to read as you don't have your string concatenation here
$stmt = $mysqli->prepare("INSERT INTO Entries (myoption1) VALUES (?)");
// Tell mysql that the '?' should be replaced with the value in your post array
$stmt->bind_param("s", $POST['myselectbox']);
// Execute the statement
$stmt->execute()
很显然,你应该添加错误处理过,但文档占地面积这个基础。
SQL注入
的主要原因为什么使用准备语句是一个不错的想法是,它避免了SQL注入攻击。
还有其他方法,但在我看来,这是最简单的解决方案。
SQL注入攻击是有人试图通过将其他SQL“注入”您的语句来更改正在运行的SQL语句的情况。
使用你的代码作为一个例子,你可以执行以下语句:
$sql = "INSERT INTO Entries (myoption1) VALUES ('". $_POST['myselectbox'] ."')";
通常会接受(我们认为)类似myoption1
。
这将导致SQL之中:
INSERT INTO Entries (myoption1) VALUES ('myoption1');
如果有人决定,他们可以发送'='' OR '1'='1
这将导致SQL之中:
INSERT INTO Entries (myoption1) VALUES (''='' OR '1'='1');
哪(显然)是非常不同的。
或者,更糟糕的发送'=')'; DROP TABLE Entries WHERE (''='
这将导致SQL之中:
INSERT INTO Entries (myoption1) VALUES (''=''); DROP TABLE Entries WHERE (''='');
使用预准备语句
简单地说,但使用准备好的语句,你告诉MySQL的你要发送的是一个字符串作为参数。它永远不能被视为声明本身的一部分,因此上述是不可能的。
更安全。
我希望能让它更清晰。如果你想要更多的信息,我建议你单独研究它...
你必须用'''''method'属性将'
我是一个初学者..你能给我一些关键字为什么我必须搜索以获得'wieder图片'谢谢 –
我最喜欢的读物之一仍然是[symfony HTTP基础知识](http://symfony.com/ DOC /电流/电子书/ http_fundamentals.html);寻找HTTP协议,分离问题和路由。 – moonwave99