////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);
答案 0 :(得分: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=''
答案 1 :(得分:0)
第一套是安全的。第二组不是。例如,如果用户要在$ id字段中提供数据,例如:'1;从表1'
中删除然后你的SQL语句将变成:
“从id = 1的客户中选择*;从表1中删除”
如果你的SQL引擎可以执行多个语句,那么你就会遇到麻烦。
答案 2 :(得分: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]));
它更安全,因为它阻止人们注入自己的答案;其他人回答。它也更容易阅读,因为你不必单引号。