首頁 > 後端開發 > php教程 > SQL中條件欄位和表格欄位名稱相同,造成全表查詢

SQL中條件欄位和表格欄位名稱相同,造成全表查詢

WBOY
發布: 2016-08-18 09:15:29
原創
1473 人瀏覽過

各位大神好,在下是小菜鳥一枚,在實踐中發現,類似如下的語句:

<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>
登入後複製
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板