为了账号安全,请及时绑定邮箱和手机立即绑定

无法通过引用传递参数

无法通过引用传递参数

PHP
鸿蒙传说 2023-09-22 16:12:04
我正在尝试为我正在开发的项目制作 PHP 安装程序。当我点击安装程序上的提交按钮时,会导致显示此错误:致命错误:未捕获错误:无法通过引用传递参数 2。代码:$stmt = $db->prepare("INSERT INTO `users` (`user_id`, `email`, `password`, `name`, `token_code`, `email_activation_code`, `lost_password_code`, `facebook_id`, `type`, `active`, `language`, `date`, `ip`, `last_activity`, `last_user_agent`, `total_logins`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");$stmt->bind_param("ssssssssssssssss", '1', $adminEmail, $adminPass, $adminUsername, '', '', '', '', '1', '1', 'english',);$adminEmail = $_POST['admin-email'];$adminUsername = $_POST['admin-username'];$adminPass = password_hash($_POST['admin-password'], PASSWORD_DEFAULT);$stmt->execute();
查看完整描述

2 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

问题就在这里,因为bind_param()要求它的所有参数都通过引用传递(第一个参数除外,它是控制字符串)。


$stmt->bind_param("ssssssssssssssss", '1', $adminEmail, $adminPass, $adminUsername, 

  '', '', '', '', '1', '1', 'english',);

像这样的字符串文字'1'不是左值,因此它们不能通过引用传递。


您可以这样修复它:


$one = '1';

$blank = '';

$english = 'english';


$stmt->bind_param("ssssssssssssssss", $one, $adminEmail, $adminPass, $adminUsername, 

  $blank, $blank, $blank, $blank, $one, $one, $english);

如果是我,我会使用 PDO 而不是 mysqli。PDO 有一种更简单的传递参数的方法。无需绑定步骤。只需作为数组传递给execute(),这接受非左值:


$stmt = $pdo->prepare(...);

$stmt->execute([

  '1', $adminEmail, $adminPass, $adminUsername, '', '', '', '1', '1', 'english'

]);


查看完整回答
反对 回复 2023-09-22
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

Bind_param 只接受变量,不接受 '' 或 '1'


所以定义一个变量并将其添加到bind_param,


$stmt = $db->prepare("INSERT INTO `users` (`user_id`, `email`, `password`, `name`, `token_code`, `email_activation_code`, `lost_password_code`, `facebook_id`, `type`, `active`, `language`, `date`, `ip`, `last_activity`, `last_user_agent`, `total_logins`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");

$emptvar = '';

$one = '1';

$language = 'english';

$stmt->bind_param("ssssssssssssssss", $one, $adminEmail, $adminPass, $adminUsername, $emptvar , $emptvar , $emptvar , $emptvar , $one, $one, $language,);


$adminEmail = $_POST['admin-email'];

$adminUsername = $_POST['admin-username'];

$adminPass = password_hash($_POST['admin-password'], PASSWORD_DEFAULT);

$stmt->execute();


查看完整回答
反对 回复 2023-09-22
  • 2 回答
  • 0 关注
  • 92 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信