-6
////MYSQL Statement////
$sql = $mysql_conn->prepare("UPDATE table SET columnname = ? WHERE id = ?";
$sql->execute(array($new_value,$id));


////SQL Statment////
$client_select = array($select);
$tsql1 = "SELECT * FROM customertable where id = ?";
$result1 = sqlsrv_query($conn, $tsql1,$client_select);
$row1 = sqlsrv_fetch_array($result1, SQLSRV_FETCH_ASSOC);

如果是这样,有人可以详细说明为什么 MYSQL 比以下更安全:

$sql = mysql_query("select * from customers where id='$id'");
$sql = mysql_fetch_assoc($sql);
4

3 回答 3

2

第二种选择

$sql = mysql_query("select * from customers where id='$id'");

不安全,因为$id可以是类似' OR 1=1 OR id='的东西,查询看起来像

"select * from customers where id='' OR 1=1 OR id=''
于 2013-03-27T14:09:01.810 回答
0

第一组是安全的。第二组没有。例如,如果用户要在 $id 字段中提供数据,例如:'1; 从表 1 中删除'

那么你的 SQL 语句将变成:

“从 id=1 的客户中选择 *;从表 1 中删除”

如果您的 SQL 引擎可以执行多个语句,那么您将遇到麻烦。

于 2013-03-27T14:10:30.527 回答
0

与您更安全的查询类似,这是我在一个类中使用的代码示例,但您应该明白:

$strSQL = "UPDATE user_table SET pname = ".$this->dbParam('a').", pname2 = ".$this->dbParam('b')."
            WHERE id = ".$this->pid;

$rs = parent::prepSQL($strSQL);
parent::doSQL($rs,array($a, $b));

这是课外的一个例子

$strSQL = "SELECT COUNT(*) FROM table_of_users WHERE login = ".$dbconn->Param('a')." AND guest_user = 0";
$rs = $dbconn->Prepare($strSQL);
$rs = $dbconn->Execute($rs,array($_POST["persnum_".$j]));

它更安全,因为它可以阻止人们注入自己的答案;其他人回答。它也更容易阅读,因为您不必单引号。

于 2013-03-27T14:10:42.077 回答