gpt4 book ai didi

php - PDO 准备语句不会用数据替换占位符

转载 作者:行者123 更新时间:2023-11-29 20:31:55 25 4
gpt4 key购买 nike

我正在使用 PDO 制作一些基本的登录注册表单,但当我 var_dump() $query 时无法在数据库中插入数据,我看到没有值不会在 $query->execute 语句中执行。请参阅下面的内容当我 var_dump($query); 时发现

**

object(PDOStatement)#4 (1) { ["queryString"]=> string(92) "INSERT INTO users(username,password,name,email,website) VALUES (?,?,?,?,?)" } Registration successfull.Click here for login

**

我遇到了这个问题,并尝试了我所知道的几乎所有方法。请查看代码帮助我找到问题所在。

数据库格式如下数据库名称:oopreg表名:users

id          int(11)       primary auto_increment
username varchar(30)
password varchar(30)
name varchar(50)
email varchar(100)
website varchar(100)

config.php

<?php
class databaseConnection{

public function __construct(){
GLOBAL $pdo;
try{
$pdo = new PDO('mysql:host:localhost;dbname=oopreg','root','');
echo "Connected";
}catch(PDOException $e){

echo "DataBase connection Error";

}
}

}

functions.php

<?php

require 'config.php';

class loginRegistration{

function __construct(){
$database = new databaseConnection();
}
public function registerUser($username,$password,$name,$email,$website){
global $pdo;
$query= $pdo->prepare("SELECT id FROM users WHERE username=? AND email=?");
$query->execute(array($username,$email));
$num= $query->rowCount();
if($num==0){
$query= $pdo->prepare("INSERT INTO users(username,password,name,email,website) VALUES
(?,?,?,?,?)");
$query->execute(array($username,$password,$name,$email,$website));
var_dump($query);
return true;

}else{
print "<span style='color:red'>Error...Username/Email alreay exists</span>";
}
}

}


?>

注册.php

<?php

require_once "functions.php";
$user= new loginRegistration();
?>

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Registration Page</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div class="wrapper">
<div class="header">
<h3>PHP OOP Login Register System</h3>
</div><!--End header Section-->
<div class="mainmenu">
<ul>
<li><a href="index.php">Home</a></li>
<li><a href="profile.php">Show Profile</a></li>
<li><a href="changePassword.php">Change Password</a></li>
<li><a href="logout.php">Logout</a></li>
<li><a href="login.php">Login</a></li>
<li><a href="register.php">Register</a></li>
</ul>
</div><!--End Manin menu section-->

<div class="content">
<h2>Register</h2>

<p class="msg">

<!--PHP area start-->
<?php
if ($_SERVER['REQUEST_METHOD']=='POST') {
$username=$_POST['username'];
$password=$_POST['password'];
$name=$_POST['name'];
$email=$_POST['email'];
$website=$_POST['website'];

if(empty($username) or empty($password) or empty($name) or empty($email) or empty($website)) {

echo "<span style='color:red;'> Field must not be empty</span>";
}else{
$password=md5($password);
$register=$user->registerUser($username,$password,$name,$email,$website);
if($register){
echo "<span style='color:green'>Registration successfull.<a href='login.php'>Click here</a> for login</span>";
}else{
echo "<span style='color:red'>UserName or email already exists</span>";
}
}

}
?>
</p>
<div class="login_reg">
<form action="" method="post">
<table>
<tr>
<td>Username:</td>
<td><input type="text" name="username" placeholder="Enter your username..."/></td>
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="password" placeholder="Enter your password..."/></td>
</tr>
<tr>
<td>Name:</td>
<td><input type="text" name="name" placeholder="Enter your name..."/></td>
</tr>
<tr>
<td>Email:</td>
<td><input type="email" name="email" placeholder="Enter your email..."/></td>
</tr>
<tr>
<td>Website:</td>
<td><input type="text" name="website" placeholder="Enter your website..."/></td>
</tr>
<tr>
<td colspan="2">
<input type="reset" name="" value="Reset"/>
<input type="submit" name="register" value="Register"/>

</td>
</tr>
</table>
</form>
<?php //var_dump($_POST); ?>
</div><!--End Login_reg page-->
<div class="back">
<a href="">Back</a>

</div>
</div><!--End Content section-->
<div class="footer">
<h3>Training with live project</h3>
</div>

</div><!--End Wrapper section-->
</body>
</html>

最佳答案

i see no value will not execute in $query->execute statement .see below what found when i var_dump($query);

没关系,PDO 就是这样工作的。它不会用 queryString 属性中的实际数据替换问号。

要了解查询不起作用的真正原因,您必须正确配置 PDO,如我的文章 PDO tutorial. Connecting. DSN 中所述。 :

public function __construct(){
$opt = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
$pdo = new PDO('mysql:host:localhost;dbname=oopreg','root','', $opt);

之后,如果出现错误,将会向您报告。

关于php - PDO 准备语句不会用数据替换占位符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38990852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com