php - 无法使用 PHP 在 MySQLi 准备好的语句中进行方法链接
问题描述
我是 PHP 的初学者。我试图不放入$conn->prepare($sql_stmt)
一个变量,而只是应用方法链接。但我得到“执行时出错”。
<?php
include_once 'dbh.inc.php';
if(isset($_POST['submit_btn']))
{
$fullname = $_POST['name'];
$username = $_POST['username'];
$password = $_POST['password'];
$sql_stmt = "INSERT INTO signup (name, username, passwrd) VALUES (?,?,?);";
//prepare and bind
$conn->prepare($sql_stmt)->bind_param("sss", $fullname, $username, $password);
//execute
if($conn->prepare($sql_stmt)->execute())
{
echo "User created";
}
else
{
echo "Error while executing";
}
}
else
{
echo "Unable to sign up.";
}
$sql = $conn->prepare($sql_stmt)
但是,如果我像下面这样实例化
<?php
include_once 'dbh.inc.php';
if(isset($_POST['submit_btn']))
{
$fullname = $_POST['name'];
$username = $_POST['username'];
$password = $_POST['password'];
$sql_stmt = "INSERT INTO signup (name, username, passwrd) VALUES (?,?,?);";
//prepare and bind
$sql = $conn->prepare($sql_stmt);
$sql->bind_param("sss", $fullname, $username, $password);
//execute
if($sql->execute())
{
echo "User created";
}
else
{
echo "Error while executing";
}
}
else
{
echo "Unable to sign up.";
}
它工作并返回“用户创建”。为什么呢?
解决方案
mysqli 无法进行方法链接。的返回值bind_param()
是一个布尔值。它不返回self
。您必须调用第二个示例中显示的方法:
$sql = $conn->prepare($sql_stmt);
$sql->bind_param("sss", $fullname, $username, $password);
$sql->execute();
事实上,mysqli 并不是很适合在你的应用程序中单独使用。如果您想要更简单的东西,请使用 PDO。如果出于某种奇怪的原因您必须使用 mysqli,那么您需要某种抽象层来阻止您直接处理 mysqli 函数。
从 PHP 8.1 开始,您可以直接在 中传递参数mysqli_stmt::execute()
,这样您就可以在一行中进行方法链接:
$sql = $conn->prepare($sql_stmt)->execute([$fullname, $username, $password]);
另外,请停止检查execute
. 您应该改为启用 mysqli 错误报告。如何在 MySQLi 中获取错误消息?
推荐阅读
- r - 使用 magrittr 管道转发运算符两次传递参数
- java - 这个中的运行时类型对象是什么
- vue.js - 使用 vuex 更新数据库中的数据
- python-3.x - Pycharm 不显示所有已安装的库
- react-select - 通过 react-sortable-hoc 对它们进行重新排序(排序)后,React-Select 下拉列表不保留值
- c# - ML.NET v1.4,预期为布尔值,得到单个异常
- php - 如何更改回调查询时钟的延迟时间?在电报机器人 sdk php
- python - 测试 pytest 夹具
- c++ - 从 USBPcap 库中读取原始数据
- vim - Neovim 块膏