php - 如何解决内部服务器错误 - PHP?

标签 php mysql sql prepared-statement

我已经检查了一遍又一遍。我是使用准备好的语句的新手,所以除非我做错了什么。

这在我添加所有字段之前就有效了。当只有用户名和密码时它就起作用了。 - 我检查了我的文本框的所有名字,它们都匹配。我的数据库列名称也与代码完美匹配。

有人可以帮我吗?我对这些准备好的声明已经束手无策,我准备跳槽了。

<?php
session_start();
require 'lib/password.php';
require 'connect.php';

if(isset($_POST['register'])){

$username = !empty($_POST['username']) ? trim($_POST['username']) : null;
$pass = !empty($_POST['password']) ? trim($_POST['password']) : null;
$email = !empty($_POST['email']) ? trim($_POST['email']) : null;
$firstname = !empty($_POST['firstname']) ? trim($_POST['firstname']) : null;
$lastname = !empty($_POST['lastname']) ? trim($_POST['lastname']) : null;
$profileurl = !empty($_POST['profileurl']) ? trim($_POST['profileurl']) : null;
$steam64id = !empty($_POST['steam64id']) ? trim($_POST['steam64id']) : null;
$steamurl = !empty($_POST['steamurl']) ? trim($_POST['steamurl']) : null;


$sql = "SELECT COUNT(username) AS num FROM users WHERE username = :username";
$stmt = $pdo->prepare($sql);

$stmt->bindValue(':username', $username);

$stmt->execute();

$row = $stmt->fetch(PDO::FETCH_ASSOC);

if($row['num'] > 0){
    alert("Username already exists!");
    die();
}

$sql = "SELECT COUNT(email) AS num FROM users WHERE email = :email";
$stmt = $pdo->prepare($sql);

$stmt->bindValue(':email', $email);

$stmt->execute();

$row = $stmt->fetch(PDO::FETCH_ASSOC);

if($row['num'] > 0){
    alert("Email already exists!");
    die();
}

$passwordHash = password_hash($pass, PASSWORD_BCRYPT, array("cost" => 12));

$sql = "INSERT INTO users (firstname, lastname, email, password, truckermpurl, steam64id, steamurl, username) VALUES (:firstname, :lastname, :email, :password, :truckermpurl, :steam64id, steamurl, username)";
$stmt = $pdo->prepare($sql);

$stmt->bindValue(':firstname', $firstname);
$stmt->bindValue(':lastname', $lastname);
$stmt->bindValue(':email', $email);
$stmt->bindValue(':password', $passwordHash);
$stmt->bindValue(':truckermpurl', $profileurl);
$stmt->bindValue(':steam64id', $steam64id);
$stmt->bindValue(':steamurl', $steamurl);
$stmt->bindValue(':username', $username);


$result = $stmt->execute();

if($result){
    //What you do here is up to you!
    alert("Thanks for registering.");
    exit();
}

}

?>

最佳答案

您需要参数

$stmt->bindValue(':steamurl', $steamurl);
$stmt->bindValue(':username', $username);

但是,您已经在准备好的语句中声明了 SQL

... , steamurl, username)"

应该是

... , :steamurl, :username)"

关于php - 如何解决内部服务器错误 - PHP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48472182/

相关文章:

php - PDO::__construct():服务器向客户端发送了未知的字符集 (255)。请向开发商举报

java - Mysql,Hibernate - 插入表时,它说字段没有默认值

php - Doctrine 一对多关系 - "No identifier/primary key specified"

mysql - 如何修正这个触发功能?

mysql - 左连接表并获取每个表的日期范围

php - 查询成功时链接到页面

php - 在文件夹中使用 .htaccess 隐藏查询字符串

sql - SSIS 问题无法解密 protected XML 节点

php - 无法从 channel 中删除 laravel_database_ 前缀

javascript - 将值从 iframe 覆盖层传递到父页面