php
  • mysql
  • session
  • 2017-07-07 28 views 1 likes 
    1

    我使用PHP會話變量跟蹤字符ID的兩個表之間,字符character_data_store。如何在使用php變量的MySQL查詢的WHERE條件中使用變量?

    會話ID肯定有正確的ID,因爲我必須在進入mySQL查詢之前打印它的值。

    爲了測試我選擇我就知道有一個rapsheet用戶和使用

    $usersql = "SELECT * 
    FROM character_data_store 
    WHERE character_data_store.`key` = 'RapSheet' 
    AND character_data_store.character_id = '216'"; 
    

    很顯然,我需要確認正確的已選定所以,這是我不能使用此爲所有用戶在會話變量變得

    我已經嘗試使用:

    $correctPlayer = $_SESSION['selpid']; 
    echo $correctPlayer; #confirm it's the right id and then remove 
    
    $usersql = "SELECT * 
        FROM character_data_store 
        WHERE character_data_store.'key' = 'RapSheet' 
        AND character_data_store.character_id = '$correctPlayer'"; 
    

    我做了一些搜索的SO,我發現這個int的需要,讓他們周圍的雙引號不是單引號,我TR滅蠅燈是並沒有運氣,但別人建議對會話ID恰好旁邊,我試過:

    $usersql = "SELECT * 
        FROM character_data_store 
        WHERE character_data_store.'key' = 'RapSheet' 
        AND character_data_store.character_id = {$_SESSION['selpid']}"; 
    

    每次我這樣做,我得到mysqli_fetch_assoc()預計參數1被mysqli_result,布爾給予其SO告訴我是因爲這個操作結果爲false,我假定它不接受來自selpid或$ correctPlayer的playerID

    它肯定與playerID直接插入查詢的測試用戶一起工作。但我想不出一種方法來做到這一點,因爲我需要匹配來自表格「角色」的玩家ID,其中搜索是根據他們的名字和姓氏完成的,然後將表格數據與表格「character_data_store」中的相同玩家ID相拉。

    如何在使用php變量的MySQL查詢的WHERE條件中使用變量?

    +0

    您使用佔位符('?')和您正在使用的mysql層的方法(PDO或mysqli_X)將變量綁定到它。 –

    +0

    你能迴應'$ usersql'嗎?看到它實際上包含一旦你已經添加到它的會話變量 – FMashiro

    +0

    @FMashiro我呼應它,它出來作爲SELECT * FROM character_data_store WHERE character_data_store.'key'='RapSheet'AND character_data_store.character_id ='376'這是我想要的是。 – DrauL

    回答

    0

    你在代碼中有明顯的錯誤。您在{$_SESSION['selpid']}中缺少引號,並且您在列名稱中使用引號。您的查詢應該是

    $usersql = "SELECT * FROM character_data_store WHERE character_data_store.`key` = 'RapSheet' AND character_data_store.character_id = '{$_SESSION['selpid']}'"; 
    

    中列名,則不應使用引號,而不是使用反引號('),如果你真正需要的。我建議準備好陳述。

    0

    有多種方法可以做到這一點。一個天真的方式做,這將是─

    $usersql = "SELECT * FROM character_data_store WHERE character_data_store.'key' = 'RapSheet' AND character_data_store.character_id = ".$correctPlayer; 
    

    但爲了避免SQL注入,我會建議你使用bindparam功能,在一份聲明中綁定PARAMATERS。

    $sql="SELECT * FROM character_data_store WHERE character_data_store.'key' = 'RapSheet' AND character_data_store.character_id = ?"; 
    if($stmt = $dbh->prepare($sql)){ 
    
        $stmt->bindParam(1, $correctPlayer, PDO::PARAM_STR); 
        $ql = $stmt->execute() or die("ERROR: " . implode(":", $dbh->errorInfo())); 
        $row = $stmt->fetch(PDO::FETCH_ASSOC); 
        $result['data'] = $row; 
    
    +0

    你能幫我解釋一下嗎? $ dbh做什麼? – DrauL

    +0

    $ dbh這裏是一個PHP數據對象,可以創建爲 - $ dbh = new PDO('mysql:host = localhost; dbname ='。$ dbname,$ dbsettings ['user'],$ dbsettings ['password']] );.在第一行中,我們創建了一個SQL語句,我們將在後面綁定我們的parm。如果$ dbh-> prepare()成功創建語句(沒有sql語法錯誤),那麼我們將param綁定到查詢然後執行它。我們可以使用提取來從查詢中獲取數據。如果結果集中有多行,請在while循環中使用fetch語句(while($ row = $ stmt-> fetch(PDO :: FETCH_ASSOC){....})。 –

    相關問題