调用未定义的函数execute()

时间:2016-05-20 17:30:40

标签: php database pdo

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..";

        }



    }


?>

1 个答案:

答案 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 / phrasesDon'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);

在你的情况下,没有必要检查计数 - 只需检查以确保执行的查询足以进入条件语句。