Php 试图在MYSQL中执行SELECT语句,但它不起作用

Php 试图在MYSQL中执行SELECT语句,但它不起作用,php,mysql,pdo,Php,Mysql,Pdo,我相信我的语法是正确的,至少根据我的课本。这只是文件的一部分,因为其他信息与我的问题无关。表名为user,列名为user。我不认为这是问题所在,因为其他sql语句也可以工作。虽然这不是我所知道的最聪明的事情:)有人看到错误吗 try { $db=new PDO("mysql:host=$db_host;dbname=$db_name", $db_user,$db_pass); } catch (PDOException $e) { exit("Error connecting t

我相信我的语法是正确的,至少根据我的课本。这只是文件的一部分,因为其他信息与我的问题无关。表名为user,列名为user。我不认为这是问题所在,因为其他sql语句也可以工作。虽然这不是我所知道的最聪明的事情:)有人看到错误吗

try {
$db=new PDO("mysql:host=$db_host;dbname=$db_name",
        $db_user,$db_pass);
} catch (PDOException $e) {
exit("Error connecting to database: " . $e->getMessage());
}
$user=$_SESSION["user"];

$pickselect = "SELECT game1 FROM user WHERE user='$user' ";
$pickedyet = $db->prepare($pickselect);
$pickedyet->execute();
echo $pickselect;

if ($pickedyet == "0")
{ 
echo '<form method="post" action="makepicks.php">
<h2>Game 1</h2>......'
试试看{
$db=new-PDO(“mysql:host=$db\u-host;dbname=$db\u-name”,
$db_用户,$db_通行证);
}捕获(PDO$e){
退出(“连接到数据库时出错:”..e->getMessage());
}
$user=$\u会话[“用户”];
$pickselect=“从用户选择游戏1,其中用户=”$user';
$pickedyet=$db->prepare($pickselect);
$pickedyet->execute();
echo$pickselect;
如果($pickedyet==“0”)
{ 
回声'
游戏1……”

将此
user=$user
更改为
user='$user'
。请注意单引号

此外,您正在执行查询
$pickedyet->execute();
,但随后执行
echo$pickselect;
,这与包含查询的字符串没有什么不同

小提示:

  • 您必须检索查询执行的结果
  • 您正在使用准备好的语句,这些语句非常好,但是您没有真正使用它们,因为您没有进行任何绑定

  • 由于您似乎在使用准备好的语句,我建议您尽量使用它们,这样您就可以避免诸如SQL注入之类的传统问题(当有人向您的应用程序传递恶意SQL代码时,可以通过清理用户输入和/或使用绑定的准备好的语句部分避免)

    除此之外,为了显示查询结果,您还必须实际获取查询结果(假设这是您的目标)。PHP有非常强大的文档和很好的示例。以下是一些链接:

    以下是一个例子:

    try
    {
        $db = new PDO("mysql:host=$db_host;dbname=$db_name",
                      $db_user, $db_pass);
    }
    catch (PDOException $e)
    {
        exit('Error connecting to database: ' . $e->getMessage());
    }
    
    $user = $_SESSION['user'];
    
    $pickedyet = $db->prepare('SELECT game1 FROM user WHERE user = :user');
    /* Bind the parameter :user using bindParam - no need for quotes */
    $pickedyet->bindParam(':user', $user);
    $pickedyet->execute();
    
    /* fetchAll used for example, you may want to just fetch one row (see fetch) */
    $results = $pickedyet->fetchAll(PDO::FETCH_ASSOC);
    
    /* Dump the $results variable, which should be a multi-dimensional array */
    
    var_dump($results);
    

    编辑-我还假设有一个名为“user”的表,其中一列名为“user”,另一列名为“game1”(即,除了使用绑定参数外,您的SQL语句是正确的)。

    仍然不起作用,我的问题是,当我回显$pickselect时,它将其显示为字符串“从用户中选择game1,其中用户='$user'"。它似乎不像我想要的那样充当sql语句!数据库中game1的值为0,但它不会返回该值以使if语句为真。+1但请同时解释这家伙准备好的语句实际上是什么,以及为什么他应该了解bindParam/bindValue是什么,而不是仅仅移动旧的mysql语句PDO准备/execute@narcisradu他犯了很多错误。我认为最好给他一些提示,而不是解释每一个错误。至少,这是我的观点。即使我不介意,对正确答案投反对票总是很有趣的。我想我的问题是如何检索查询执行的结果?我想看看答案是什么它正在恢复,因为它得到的值没有使if语句为真。1)$pickselect=“SELECT game1 FROM user WHERE user=”“$user””;2)bindValue非常有用,因为它大大减少了注入的可能性。擦掉它,找出它。fetch()修复了它
    try
    {
        $db = new PDO("mysql:host=$db_host;dbname=$db_name",
                      $db_user, $db_pass);
    }
    catch (PDOException $e)
    {
        exit('Error connecting to database: ' . $e->getMessage());
    }
    
    $user = $_SESSION['user'];
    
    $pickedyet = $db->prepare('SELECT game1 FROM user WHERE user = :user');
    /* Bind the parameter :user using bindParam - no need for quotes */
    $pickedyet->bindParam(':user', $user);
    $pickedyet->execute();
    
    /* fetchAll used for example, you may want to just fetch one row (see fetch) */
    $results = $pickedyet->fetchAll(PDO::FETCH_ASSOC);
    
    /* Dump the $results variable, which should be a multi-dimensional array */
    
    var_dump($results);