bellow是我的代码。显示的错误就像
致命错误:在第21行调用未定义函数execute(),
我怎么能解决这个问题?
<?php
include 'config/dbconfig.php';
include 'lib/function.php';
include 'helper/helper.php';
$db = new rootfunc();
$fm = new formate();
if(!empty($_POST['name']) or !empty($_POST['email']) or !empty($_POST['password1']) or !empty($_POST['dob']) or !empty($_POST['gender']) ){
$name = $fm->validation($_POST['name']);
$email = $fm->validation($_POST['email']);
$password = $fm->validation($_POST['password1']);
$dob = $_POST['dob'];
$gender = $fm->validation($_POST['gender']);
$query = $pdo->prepare("SELECT * FROM user_table WHERE name = ? AND email = ?");
$query = execute(array($name,$email));
$numRow = $query->rowCount();
if(!$numRow){
$query = "INSERT INTO user_table (name,email,password,dob,gender) VALUES (?,?,?,?,?)";
$query = $pdo->prepare($query);
$query->execute(array($name,$email,$password,$dob,$gender));
echo "Congrates, please login..";
}else{
echo "name and email exist..";
}
}
?>
答案 0 :(得分:2)
在这两种情况下,您都会覆盖$query
:
$query = "INSERT INTO user_table (name,email,password,dob,gender) VALUES (?,?,?,?,?)";
$query = $pdo->prepare($query);
您需要为执行提供不同的变量来保存对象,例如:
$query = "INSERT INTO user_table (name,email,password,dob,gender) VALUES (?,?,?,?,?)";
$result = $pdo->prepare($query);
$result->execute(array($name,$email,$password,$dob,$gender));
此外,您应该允许用户使用他们想要的passwords / phrases。 Don't limit passwords.
当您使用密码时,永远不要将它们存储为纯文本!请使用PHP的built-in functions来处理密码安全性。如果您使用的PHP版本低于5.5,则可以使用password_hash()
compatibility pack。在散列之前,请确保don't escape passwords或使用任何其他清理机制。这样做更改密码并导致不必要的额外编码。
我在你的代码中也注意到了这一点
$numRow = $query->rowCount();
由于查询是SELECT
查询,因此无法使用rowCount()
来自docs:
PDOStatement :: rowCount()返回受相应PDOStatement对象执行的最后一个DELETE,INSERT或UPDATE语句影响的行数。
对于SELECT
当您没有执行COUNT()
查询时,您可以在执行查询后返回这样的行数;
$rows = $result->fetchAll();
$num_rows = count($rows);
在你的情况下,没有必要检查计数 - 只需检查以确保执行的查询足以进入条件语句。