php
  • mysql
  • 2012-01-02 58 views 1 likes 
    1

    我想運行下面的查詢,但我不確定我的是否應該是$ form_id =記錄的列$ user_id是名爲cf_id的記錄的主鍵。我在哪裏需要在我的MYSQL查詢中使用反引號或引號?

    $ querydate將在稍後的腳本中回顯,因爲它會從等於$ form_id和$ user_id的記錄中提取日期。

    $querydate = mysql_query("SELECT '$form_id' FROM email_history WHERE cf_id = '$user_id'") or die(mysql_error()); 
    

    編輯>>>>>>

    嘗試下面的一些解決方案後,它似乎工作確定,但不但得不到下形式的名稱保存日期,我得到這個回聲」 d代替,所以即時通訊不知道什麼現在發生: :資源ID#120 :資源ID#121 :資源ID#122 :資源ID#123

    該表是設置像followng:

    [USER_ID] [FORM_ID1212212] [FORM_ID1212112] 
    [1]  [2-1-2012]  [2-1-2012]  
    [2]  [1-1-2012]  [1-1-2012]  
    
    +0

    你不應該像這樣執行MySQL查詢;使用預先準備的語句。 – 2012-01-02 19:30:27

    +0

    [反引號和單引號之間有什麼區別?我可以在查詢中使用IF語句嗎?](http://stackoverflow.com/questions/2122721/what-are-the-differences-between-backtick-and-single-quote-can-i-use-if - 狀態) - 和 - [在字段名稱附近使用反引號](http://stackoverflow.com/questions/261455/using-backticks-around-field-names) – mario 2012-01-02 19:40:12

    +0

    re:編輯...您正在使用的教程應該顯示如何使用mysql_fetch_row()從$ querydate結果集中獲取每個結果 – 2012-01-02 19:50:36

    回答

    6

    對錶和列名使用反引號(`),對字符串使用單引號(')。

    $querydate = mysql_query("SELECT `$form_id` FROM email_history WHERE cf_id = '$user_id'"); 
    
    當你的表名或列名是一個MySQL的保留字......最好的做法是避免保留字

    只需要

    反引號

    還要考慮切換到PDO和使用準備好的語句,或在至少到庫MySQLi而不是MySQL的

    +0

    FWIW,您不能將表名或列名與預準備語句綁定。 – Alnitak 2012-01-02 19:31:55

    +1

    確實,您不能綁定表/列名稱;但有了一個定義良好的數據模型,你不需要...並且這並不意味着你仍然不能在字符串中使用$變量......我只是推薦一個通用的最佳實踐,而不是繼續使用mysql的擴展名,可怕的「或死」也應該交給歷史 – 2012-01-02 19:32:43

    +0

    確實,但似乎在OP的情況下,該船已經航行... – Alnitak 2012-01-02 19:33:19

    1

    最好的做法是:

    "SELECT `$form_id` FROM `email_history` WHERE `cf_id` = '$user_id'" 
    

    反引號應圍繞字段名和表名(和DB名)一起使用,並且報價應該圍繞價值被使用。

    +2

    很難認同這是「最佳實踐」,因爲PDO的存在...... – 2012-01-02 19:31:05

    +0

    :)我同意與此...這是「最佳做法」,假設您只是手動編寫mysql查詢 – 2012-01-02 19:32:59

    1

    您應該:

    1. 確保$form_id是一個合法的表名,特別是,如果它是由用戶提供的輸入生成的。

    2. 使用綁定參數爲$user_id

    例如爲:

    $sql = "SELECT `$userid` FROM `email_history` WHERE `cf_id` = ?" 
    $res = $db->query($sql, array($user_id)); 
    while ($row = $res->fetchRow()) { 
        ... 
    } 
    

    返回蜱是適用於所有表和列名。不幸的是,你不能在參數化查詢中使用變量列名,所以你需要手動構建查詢的這一部分。

    +0

    你會迴應' $水庫;從該查詢中獲取信息? – 2012-01-02 19:54:18

    +0

    @IainSimpson不,結果將在'$ row [0]'中。 – Alnitak 2012-01-02 21:35:41

    相關問題