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'
]);

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();
- 2 回答
- 0 關注
- 126 瀏覽
添加回答
舉報