我的意思是,我当前的预处理语句是这样开始的:
$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);
?>
我实际上没有注意到,是的,我有一个很好的想法。我们都会犯错。我移动了include('connection.php');在函数内部,现在它完美地工作了。请加上这个作为答案,我将接受。——user3822332
按OP的要求。
这里有一个变量作用域的问题。
- http://php.net/manual/en/language.variables.scope.php
因此,您的变量不能从函数访问。
- 在他们提出的问题下建立解决方案。
错误检查链接引用:
- http://php.net/manual/en/mysqli.error.php
- http://php.net/manual/en/function.error-reporting.php
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
这些都不是有效的sql,因此整个"查询"是无效的