各位大神好,在下是小菜鳥一枚,在實踐中發現,類似如下的語句:
<code>SELECT * FROM seller_item_classify where sid=$sid order by cweight asc ; </code>
其中$sid為前端傳過來的數值,seller_item_classify為表明,sid為表中的一個字段名;
如果$sid傳過來的值正好是'sid'的時候,SQL的這個where就失效了,造成了全表查詢;
因為在生產環境中,$sid的值可能是數值,可能是char;我應該在php裡做對前端輸入值的過濾?
請問各位是如何看這個問題?
各位大神好,在下是小菜鳥一枚,在實踐中發現,類似如下的語句:
<code>SELECT * FROM seller_item_classify where sid=$sid order by cweight asc ; </code>
其中$sid為前端傳過來的數值,seller_item_classify為表明,sid為表中的一個字段名;
如果$sid傳過來的值正好是'sid'的時候,SQL的這個where就失效了,造成了全表查詢;
因為在生產環境中,$sid的值可能是數值,可能是char;我應該在php裡做對前端輸入值的過濾?
請問各位是如何看這個問題?
<code>"SELECT * FROM seller_item_classify where sid='$sid' order by cweight asc ;"</code>
對於前端輸入值,後端必須過濾,建議使用sql預處理。
SQL的條件值都加上''
<code>sid = '$sid'</code>
as 別名
好使嗎?
加上單引號就解決了
'SELECT * FROM seller_item_classify where sid='.$sid.' order by cweight asc ;'
用pdo預處理
<code><?php $sid = issset($_REQUEST['sid']) ? htmlspecialchars(trim($_REQUEST['sid'])) : ''; if (!$sid or $sid=='sid') { // 非法请求 这里可以抛出一些异常 }</code>