php
  • mysql
  • sql
  • mysql-error-1054
  • 2013-04-20 55 views 3 likes 
    3

    我有一個領域idsender_idreceiver_idreceiver_id包含字符串值文檔表像U12,U13,U14現在我當前登錄的用戶,我想在其中找到receiver_id包含所有記錄我的user_id意味着我的user_idU13 。現在如何編寫查詢來獲取記錄。如何檢查數據庫列中的字符串?

    我的查詢是:

    $selDoc="SELECT * FROM documents WHERE sender_id='U".$_SESSION['userId']."' OR "U".$_SESSION['userId']." IN (receiver_id) ORDER BY id DESC"; 
    

    ,但我得到了錯誤未知列「U13」「where子句」

    回答

    4

    您字符串連接搞砸了,它應該是:(進一步簡化

    $selDoc="SELECT * FROM documents WHERE 'U".$_SESSION['userId']."' IN (senderID,receiver_id) ORDER BY id DESC"; 
    

    當上面的語句解析,它就會像這樣:

    SELECT * 
    FROM documents 
    WHERE 'UXX' IN (senderID,receiver_id) // where XX is the userID 
    ORDER BY id DESC 
    

    作爲旁註,查詢是用SQL Injection脆弱,如果變量的值(小號)從外部來了。請看下面的文章,瞭解如何防止它。通過使用PreparedStatements你可以擺脫使用單引號圍繞值。

    +1

    非常感謝它現在的工作 – 2013-04-20 06:10:04

    +0

    @JW爲'IN'正確的語法是'WHERE列名IN(值1,值2,...)' – 2013-04-20 06:10:10

    +0

    一旦停止計時器我會接受你的答案 – 2013-04-20 06:10:56

    1

    你缺少一個報價出現。此外,您應該考慮在查詢中使用綁定變量(指定值以查找變量,然後在查詢中使用佔位符),以避免SQL注入的問題(如果您不知道這是什麼,請查看它,這是非常重要的就知道了!)

    相關問題