2016-02-10 36 views
1

這裏是我的相關代碼:如何在SQL查詢中使用會話變量?

<?php 
require("common.php"); 

$userID = $_SESSION['user']['id']; 

echo $userID; 
if(!empty($_POST)) 
{ 
    if(empty($_POST['bio'])) 
     { 
      die("Please enter your Bio."); 
     } 

    if(empty($_POST['location'])) 
     { 
      die("Please enter your location");  
     } 


    $query = 'UPDATE users 
       SET usertype = 1 
       WHERE id="$userID"'; 


    $query_params = array( 
     ':bio' => $_POST['bio'], 
     ':location' => $_POST['location'], 
    ); 

    try 
    { 
     $stmt = $db->prepare($query); 
     $result = $stmt->execute(); 
    } 
    catch(PDOException $ex) 
    { 
     die("Failed to run query: " . $ex->getMessage()); 
    } 

    // header("Location: myprofile.php"); 
} 
?> 

我想外地用戶類型更新爲1上提交一個表單,其中ID匹配當前會話的是,作爲變量$用戶ID設置的。代碼運行時,它不提供錯誤,但在查詢內部使用PHP變量似乎不起作用,該字段不會更新。

我試過不同的引號,並且我可以在整個多個if語句中訪問變量,但是不在查詢中。另外,我正在使用PDO。任何幫助表示讚賞!

回答

1

您在查詢中使用了錯誤的引號。他們改成這樣:

$query = "UPDATE users 
      SET usertype = 1 
      WHERE id='$userID'"; 

的報價是使用時要傳遞給字符串變量不相連來。而MYSQL需要撇號來將該值理解爲一個字符串。

這就是你出錯的地方:你在查詢中使用引號"

既然你已經在使用PDO,所以我沒有看到剛好路過的用戶ID作爲參數的問題:

$query = 'UPDATE users 
      SET usertype = 1 
      WHERE id=:userid'; 


$query_params = array( 
    ':bio' => $_POST['bio'],   //I think you will need to add those 
    ':location' => $_POST['location'], //parameters to the string or it will fail 
    ':userid' => $userID 
); 

當然,你可以使用PHP字符串撇號,但你需要逃避的MySQL查詢撇號,並連接所有的變量,如下所示:

$query = 'UPDATE users 
      SET usertype = 1 
      WHERE id=\''.$userID.'\''; 
+0

謝謝你,這是唯一的問題! –