php
  • mysqli
  • 2016-11-19 39 views 0 likes 
    0

    有人可以幫助弄清楚爲什麼這個查詢不會從我的數據庫中檢索某個記錄?PHP和Mysqli不檢索某個記錄

    $db = new mysqli(DB_HOSTNAME,DB_USERNAME,DB_PASSWORD,DB_DATABASE); 
    $query1 = $db->query("SELECT * FROM `customer` WHERE `wmmw_domain` = '" . array_shift((explode(".",$_SERVER['HTTP_HOST']))) . "'"); 
         while($r = $query1->fetch_array()){ 
    
           $aff_id = $r['wmmw_id']; 
        } 
    echo $aff_id; 
    

    這是鏈接的測試腳本: http://evecournoyer.wm-mw.org/testindex.php

    如果更改一個字母,或加上一個字母,以數據庫記錄 (如evecournoyer1,或vecournoyer),它的工作原理。

    是否有名稱evecournoyer阻止 查詢運行?這很奇怪....

    這裏是一個工程: http://brucetherrien.wm-mw.org/testindex.php

    注:我可以檢索使用Perl從命令shell的記錄,如果它很重要。

    +0

    嘗試在表名和列名周圍添加反引號。這可能無法解決您的問題,但它會防止mysql保留字錯誤。 – SuperDJ

    +0

    添加反引號,但仍然沒有工作.... :( – musicweb

    +0

    你說什麼沒有意義...此外,我試圖呼應'array_shift((explode(「。」,$ _ SERVER ['HTTP_HOST' ])))'它會導致一個警告,如果你將這個代碼改成'explode(「。」,$ _SERVER ['HTTP_HOST'])[0]'?會產生相同的輸出。域) – 2016-11-19 14:06:12

    回答

    0

    嘗試使用prepare()binding params和結果。 希望是這樣的:

    $link = mysqli_connect('localhost', 'my_user', 'my_password', 'world'); 
    
    $stmt = mysqli_prepare($link, 'select name, id from mytable where myfield=?'); 
    mysqli_stmt_bind_param($stmt, 's', $myValue); 
    
    $myValue = getSessionHttpHost(); 
    
    /* bind result variables must match */ 
    $stmt->bind_result($name, $id); 
    
    /* fetch values */ 
    while ($stmt->fetch()) { 
        printf ("%s (%s)\n", $name, $id); 
    } 
    
    /* close statement and connection */ 
    mysqli_stmt_close($stmt); 
    
    ...... 
    

    我會檢查數據類型,編碼和長度的問題的字段。

    我認爲你得到了其他域的結果,所以你的http_host語句正在工作。

    從子域添加或刪除字符使其工作沒有意義。如果數據類型長度超過了,並且存儲的值被截斷了,那麼我預計它會失敗選擇條件,但是您正在添加它並且它可以工作。

    我看不到任何應該失敗的子域。如上所示,查看查詢字符串可能會在where條件中顯示異常。如果通過命令提示符或客戶端使用該域的http_host代碼的結果手動運行,查詢是否會失敗?

    +1

    他們使用'mysqli_' API連接並且你建議他們使用'mysql_real_escape_string()';你不能混合不同的MySQL API,另外,準備好的語句比'real_escape_string()'更好。 –

    +0

    Ops錯過了msqli。 –

    +0

    由於沒有處理傳入的http_host內容,我仍然會推薦使用alternatve,如Fred -ii-,prepare()和bind_param()所示,以清除您在查詢中接收和使用的內容,並保存到數據庫中。 –

    相關問題