在研究php.net后我仍然感到困惑。
来自php.net: mysqli_stmt :: bind_result - mysqli_stmt_bind_result - 将变量绑定到结果存储的预准备语句,并将结果集中的列绑定到变量。
我的不确定性: “绑定列” - 什么列? PHP是否将变量(var1,var2等)放入列中。列是否引用数据库中的列?与此同时,我将研究与myqli bind_result()相关的列。
来自php.net: 当调用mysqli_stmt_fetch()来获取数据时,MySQL客户端/服务器协议将绑定列的数据放入指定的变量var1,....
我的不确定性: “数据进入指定变量var1” - 什么数据?这是用户提供的数据吗?这个数据是bind_result($ x)生成并返回(神奇地?)
我还试图通过一个具有类似问题的成员的Stackoverflow帖子来理解这个函数 - (使用bind_result推入数组)问Jun 17 at 20:36 jskidd3 - 尽管他的代码示例非常相似对我来说,他的问题不像我在这里的问题那么基本。
我正在尝试深入了解mysqli“bind_result()”函数,我不知道甚至在表面上有什么问题。那么,这个功能的目的是什么?另外,理论上你能说明在绑定结果之后准备语句会是什么样子吗?如果可能的话,你可以清除PHP.net网站上留下的含糊之处吗?您可以使用我从http://www.mustbebuilt.co.uk/2011/11/17/mysqli-cheatsheet/获得的以下示例。
在我的下面的例子中,我不明白$ filmName被传递给bind_result($ filmName)的是什么值,我不明白通过echo输出会得到什么结果?
我真的很感谢你的帮助,并帮助我理解这个功能正在发生什么。谢谢!!
查询方案 - 使用prepare:用户输入的一行:
$stmt = $mysqli->prepare("SELECT filmID, filmName FROM movies WHERE filmID = ?");$stmt->bind_param('i', $_GET['filmID']);
$stmt->execute();
//what value is being passed - and where is $filmName(and it's value) coming from?
$stmt->bind_result($filmName);
$stmt->fetch();
$stmt->close();
//resulting value or output displayed?
echo $filmName;
答案 0 :(得分:0)
在PHP中执行以下语句时,结果存储在MySQL中,而不是PHP中。二进制MySQL协议的工作方式是您需要从语句中获取每一行,直到MySQL告诉您没有其他要获取的内容为止。
$stmt = $mysqli->prepare("SELECT filmID, filmName FROM movies WHERE filmID = ?");
$stmt->bind_param('i', $_GET['filmID']);
$stmt->execute();
mysqli扩展的设计者认为,如果不代替获取PHP数组,而是每次调用fetch()
方法时,将来自MySQL服务器的数据绑定到单独的变量中,将是一个好主意。变量需要使用bind_result()
方法进行绑定。该方法将创建变量,并且每次进行fetch()
调用时,它将把来自MySQL的数据分配给PHP变量。如果数据存储在PHP中,则将从内部缓冲区中获取数据。
这些列是指您在SELECT
语句中指定的列的列表。变量的绑定顺序与SQL中列出的列相同。您将选择两列filmID, filmName
,因此理想情况下,应为PHP提供两个变量以将数据插入其中。
$stmt->bind_result($filmID, $filmName);
答案 1 :(得分:-1)
“绑定列”
指查询结果的列。
“数据进入指定的变量var1”
执行提取时(如$stmt->fetch()
),绑定变量将根据绑定分配值。您不需要每次都显式分配值。
查询
$stmt = $mysqli->prepare("SELECT filmID, filmName FROM movies WHERE filmID = ?");
列按顺序filmID
,filmName
。
当您调用bind_result
时,它会将第一个变量绑定到结果中的第一列。在这种情况下,
$stmt->bind_result($filmName);
实际上最终将变量$fileName
绑定到filmID
字段。
如果你想要正确绑定filmName,你可以重新编写查询,使filmName成为第一个:
$stmt = $mysqli->prepare("SELECT filmName, filmID FROM movies WHERE filmID = ?");
或者你可以绑定filmID变量:
$stmt->bind_result($filmID, $filmName);