如何使这个实时验证工作与我的sql PDO


How to make this live validation work with my sql PDO

我的意图是做一个实时验证,我发现了一个方面,教程,但他们使用旧的sql,我想使用我的sql PDO,但我不能使它工作,即使我的数据库具有相同的名称,它仍然说好的。

我是如何让它工作的,在你检查我的代码之前,请查看并下载链接来检查它,谢谢。

从这里下载:请查看此链接

我的代码(我改变了一些PDO,但仍然不能工作)dbConnector.php

<?php
    class DbConnector {
    var $link;
    function DbConnector(){
            try{
                $this->link = new PDO('mysql:host=127.0.0.1;dbname=system', 'root', '123456');
                $this->link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                $this->link->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
            }catch(PDOException $e){
                die("this is not connected");
            }
        }
      //*** Function: query, Purpose: Execute a database query ***
        function query($query) {
        try{
        $this->link->prepare($query);
        }catch(PDOException $e){
            die("fail to prepare");
        }
        return $this->link;
    }
    }
    ?>

check.php

<?php
include("dbConnector.php");
$connector = new DbConnector();
$username = trim(strtolower($_POST['username']));
$query = "SELECT air_users FROM USER_NAME WHERE username = ? LIMIT 1";
$result = $connector->query($query);
$result->execute(array($username));
$num = $result->rowCount();
$num = $result->fetch();
echo $num;
// mysql_close();
?>

我没有任何错误,但仍然不能工作。谢谢你的帮助。

您需要返回$this->link->prepare($query);的返回值,而不是$this->link本身。要使其工作,可以这样重写查询:

function query($query) {
  return $this->link->prepare($query);
}

我不认为$username变量在字符串上被解释,因为你有它。

"SELECT users FROM USER_NAME WHERE username = :username' LIMIT 1";
...
execute(array(':username' => $username));

和在查询方法调用上准备如下:

  $this->link->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));

 "SELECT users FROM USER_NAME WHERE username = ? LIMIT 1";
    ...
 execute(array($username));

准备方法应该像你在例子中那样调用:

$this->link->prepare($query);

在查询方法中,你返回$query或字符串。您应该返回实例或在查询方法中执行。

function query($query) {
    try{
    $this->link->prepare($query);
    }catch(PDOException $e){
        die("fail to prepare");
    }
    return $this->link;
}