如何在SQL查询中使用会话变量?

时间:2016-02-10 00:54:27

标签: php mysql sql pdo

以下是我的相关代码:

<?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");
} 
?> 

我尝试在提交表单时将字段usertype更新为1,其中id与当前会话的id匹配,如变量$ userID中所设置的那样。当代码运行时,它没有提供任何错误,但在查询中使用PHP变量似乎不起作用,该字段不会更新。

我尝试过不同的引号,我可以在多个if语句中访问变量,但不能在查询中访问。另外,我正在使用PDO。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分: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.'\'';