This question already has answers here:
How can I prevent SQL injection in PHP?
(28个答案)
7年前关闭。
我有这样的代码和平:
我的问题是:有没有一种方法可以以一种简单的方式在
例如在C#中,我使用String.Format作为他的代码:
更新:
在注释中,您说过必须使用mysql_ *扩展名。如果这样做,您应该知道,必须转义每个值以防止SQL注入(inject)。像这样:
如果您需要此附加信息:
注意:使用
(28个答案)
7年前关闭。
我有这样的代码和平:
$result = mysql_query("SELECT * FROM T_utilisateur WHERE cin = '" . $_POST['cin'] . "', AND pwd = '" . $_POST['pwd'] . "'");
我的问题是:有没有一种方法可以以一种简单的方式在
mysql_query()
函数中写入字符串,因为有时我必须将许多变量连接到字符串上。例如在C#中,我使用String.Format作为他的代码:
String.Format("SELECT * FROM T_utilisateur WHERE cin = '{0}', AND pwd = '{1}'", cin, pwd);
,这是一种简单的方法,因为如果我将concat与'
一起使用,有时会忘记char .
最佳答案
使用准备好的语句。它们是为此目的而设计的。此外,您应该注意,以实际方式构建SQL查询容易受到SQL注入(inject)的攻击。换句话说,这是易受攻击的代码的最佳示例。如果黑客发布SQL语句怎么办?预备语句可以防止这种情况,因为它将查询数据与查询语法分开。
在PHP中,您可以将 PDO
用于准备好的状态表(以及其他扩展名)。这是一个简短的示例:
$pdo = new PDO('...');
$stmt = $pdo->prepare('SELECT FROM table WHERE id=:id AND title=:title ...');
$stmt->execute(array('id' => 1, 'title' => 'test'));
更新:
在注释中,您说过必须使用mysql_ *扩展名。如果这样做,您应该知道,必须转义每个值以防止SQL注入(inject)。像这样:
// first(!!!) connect to mysql. this is important because
// mysql_real_escape_string() will need information about
// the current connection's encoding to work properly
if(!mysql_connect(...) && mysql_select_db(...)) {
die('mysql connection error');
}
// escape values
$id = mysql_real_escape_string($_POST['id']);
$title = mysql_real_escape_string($_POST['title']);
...
// now you could just use double quotes `"` to insert vars into the query string:
mysql_query("SELECT * FROM `table` WHERE id = $id AND title = '$title'");
如果您需要此附加信息:
注意:使用
{}
的语法称为curly syntax,可用于访问双引号"
字符串中的数组。我没有在示例中使用它,因为不建议在查询中放置post var而不先转义它们。但是,这里有一个语法示例:$array = array('foo' => 'bar');
$string = "Hello {$array['foo']}";
关于php - 将值连接到php中的字符串的简单方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16133304/