是否可以在准备好的语句中使用变量而不是文字?如果是这样,如何?

Is it possible to use variables instead of a literal in prepared statements? If so, how?

我的意思是,我当前准备好的语句是这样开始的:

$stmt = $bd->prepare("SELECT Beer_Name FROM Beer WHERE Gluten = ?");

但是有没有可能这样做(如下)?因为我试了好几种方法,none都成功了。

$stmt = $bd->prepare("'.$sql.'");

我问是因为我正在尝试创建一个函数,因为我正在编写一个使用大量查询的网站。

<?php

include('connection.php');


    global $sql;
    global $ready;


        $sql = 'SELECT Beer_Name FROM Beer WHERE Gluten = ?';
        $ready = "Yes";


function bindingHelper($ready, $sql) {

            $stmt = $bd->prepare($sql);
            $stmt->bind_param("s", $ready);
            $stmt->execute();
            $stmt->store_result();
            $stmt->bind_result($beer_name);
            $stmt->fetch();

            echo($beer_name);
}

bindingHelper($ready, $sql);

?>

PHP 字符串 101:

你有这个:

$sql = "SELECT 'foo'";
$stmt = $bd->prepare("'.$sql.'");

您将向数据库发送此文字查询:

   '.SELECT 'foo'.'
   ^^------------^^- quotes and . from the prepare() call
     ^^^^^^^^^^^^--- contents of $sql

由于数据库完全没有知道这个字符串是如何创建的,所以它从表面上看:

  '.SELECT 'foo'.'
  ^^^^^^^^^^--- string literal
            ^^^--- unknown keyword
               ^^^--- string literal
其中

None 有效 sql,因此整个 "query" 无效。

I didn't notice that actually, and yes I have a fair idea. We all make mistakes. I moved include('connection.php'); inside the function and now it works perfectly. Please add this as an answer and I'll accept. – user3822332

根据 OP 的要求。

这里是变量范围问题。

因此,您的变量未从函数中访问。

  • 在他们的问题下的评论中建立解决方案。

检查链接引用时出错: