This question already has answers here:
How can I prevent SQL injection in PHP?

(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/

10-12 17:22
查看更多