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

时间:2015-06-09 15:46:34

标签: php mysqli prepared-statement

我的意思是,我目前准备的声明是这样开始的:

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

但是可以像这样(下面)这样做吗?因为我尝试了几种方法,但没有一种方法成功。

$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);

?>

2 个答案:

答案 0 :(得分:2)

  

我实际上并没有注意到,是的,我有一个公平的想法。我们都会犯错。我移动了include(&#39; connection.php&#39;);在功能内部,现在它完美地工作。请添加此作为答案,我接受。 - user3822332

根据OP的要求。

这里有一个可变范围问题。

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

  • 在他们提出问题的意见中建立解决方案。

检查链接引用时出错:

答案 1 :(得分:1)

PHP字符串101:

你有这个:

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

您将把这个文字查询发送到数据库:

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

由于数据库绝对 NO 了解如何创建此字符串,因此需要使用面值:

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

这些都不是有效的sql,因此整个&#34;查询&#34;无效。