PHP中的分号表示提交

时间:2013-04-27 02:57:55

标签: php mysql

两个相关的问题应该很容易,但我的搜索结果是空的。

  1. 我在PHP中有一个来自。如果某个字段中有一个分号,并且我在操作页面中执行$ _POST转储,则会在分号处截断字段值。我猜这与SQL注入安全性有关?但是需要允许合法的半冒号。是否有允许此操作的设置?或者我是否需要逃避它,如果是这样,怎么办?

  2. 要捕获实际的SQL注入,我不需要在一个查询中允许多个语句...例如“SELECT * FROM table; DROP table”。是否有一个设置可以在PHP或MySQL中禁用此功能,但不会停止合法的分号?

2 个答案:

答案 0 :(得分:1)

分号不会造成任何问题。

使用准备好的陈述。

mysqli中:

$stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?');
$stmt->bind_param('s', $name);

$stmt->execute();

$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
    // do something with $row
}

PDO中:

$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name');

$stmt->execute(array(':name' => $name));

foreach ($stmt as $row) {
    // do something with $row
}

使用mysql_real_escape_string

$unsafe_variable = $_POST["user-input"];
$safe_variable = mysql_real_escape_string($unsafe_variable);

mysql_query("INSERT INTO table (column) VALUES ('" . $safe_variable . "')");

查看此问题以获取更多信息How can I prevent SQL injection in PHP?

答案 1 :(得分:0)

好的,傻我。是的,我正在使用准备好的语句,转义等等。但是我还希望在它输入到目前为止之前对输入进行消毒。所以我有一个全局函数来检查所有参数,取出撇号和分号后的任何内容。适用于GET值,但是我忘了我需要更新它以不同的方式处理POST参数,并且忘记了它就在那里,因为到目前为止我还没有输入分号。 :)但感谢您的回复。