Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP Select语句-错误_Php_Html_Mysqli - Fatal编程技术网

PHP Select语句-错误

PHP Select语句-错误,php,html,mysqli,Php,Html,Mysqli,我是一名学生,我正在开发一个应用程序。我在我的登录掩码中的DB处理程序中创建了两个方法,供用户登录或注册 <?php class DBHandler { var $hostname; var $user; var $pw; var $db; var $connection; function connectToDB($hostname,$user,$pw,$db){ $this->hostname = $hostname; $this

我是一名学生,我正在开发一个应用程序。我在我的登录掩码中的DB处理程序中创建了两个方法,供用户登录或注册

    <?php


    class DBHandler
    {

var $hostname;
var $user;
var $pw;
var $db;

var $connection;

function connectToDB($hostname,$user,$pw,$db){
    $this->hostname = $hostname;
    $this->user = $user;
    $this->pw = $pw;
    $this->db = $db;

    $this->connection = new mysqli($this->hostname,$this->user,$this->pw,$this->db);

    if ($this->connection->connect_error) {
        die('Failed to connect' . $this->connection->connect_error);
    }

    $this->ensureNotesTable();
    $this->ensureUsersTable();
}

function ensureUsersTable(){
    assert($this->connection);

    $queryCreate = "CREATE TABLE IF NOT EXISTS users(id INT(5) PRIMARY KEY AUTO_INCREMENT, username VARCHAR(100) NOT NULL, password VARCHAR(100) NOT NULL)";
    $this->connection->query($queryCreate);
}

function ensureNotesTable(){
    assert($this->connection);

    $queryCreate = "CREATE TABLE IF NOT EXISTS notesnew(id INT(5) PRIMARY KEY AUTO_INCREMENT, title VARCHAR(100) NOT NULL, content VARCHAR(100) NOT NULL, userid INT(5) NOT NULL)";
    $this->connection->query($queryCreate);
}

function ensureUsername($username,$password){
    assert($this->connection);

    echo $username;

    $query = "SELECT * FROM users WHERE username = (?)";
    $statement = $this->connection->prepare($query);
    $statement->bind_param('s',$username);
    $results = $statement->execute();
    echo $this->connection->errno.'-'.$this->connection->error;

    if(mysqli_num_rows($results) >= 1){
        echo $this->connection->errno.'-'.$this->connection->error;
        echo "Username already exists";
    } echo "Username is free!";
        $this->addUser($username,$password);
}


function addUser($username,$password){
    assert($this->connection);

    $queryCreate = "INSERT INTO users(username, password) VALUES (?,?)";
    $statement = $this->connection->prepare($queryCreate);
    $statement->bind_param('ss', $username, $password);

    return $statement->execute();

    echo "You have been registered!";
}

function getUserId($username){
    assert($this->connection);

    $queryCreate = "SELECT id FROM users WHERE username = $username";
    $row = $this->connection->query($queryCreate);

    $userid = mysqli_fetch_row($row);
    return $userid[0];
}

function addNote($title, $text, $userID){
    assert($this->connection);

    $queryCreate = "INSERT INTO notesnew(title, content, userid) VALUES (?,?,?)";
    $statement = $this->connection->prepare($queryCreate);
    $statement->bind_param('ssi', $title,$text,$userID);

    return $statement->execute();
}
您的问题在于:

$statement = $this->connection->prepare($query);
$statement->bind_param('s',$username);
$results = $this->connection->query($statement)
当您使用准备好的语句时(做得好,这里有很多人不这么做!),您需要在语句上使用
execute()
方法,而不是在连接上调用
query()
。因此,这应该是可行的:

$results = $statement->execute()
你的问题是:

$statement = $this->connection->prepare($query);
$statement->bind_param('s',$username);
$results = $this->connection->query($statement)
当您使用准备好的语句时(做得好,这里有很多人不这么做!),您需要在语句上使用
execute()
方法,而不是在连接上调用
query()
。因此,这应该是可行的:

$results = $statement->execute()

对原文作一些小改动:

function ensureUsername( $username=false, $password=false ){
    $rv=false;/* Return Value */
    if( !assert( $this->connection ) or !$username or !$password ) return $rv;
    $db=$this->connection;/* shorthand for laziness */


    $sql = "select `username` from `users` where `username`=?;";
    $stmt = $db->prepare( $sql );
    $stmt->bind_param('s', $username );
    $res = $stmt->execute();
    $stmt->store_result();

    if( $res ){
        $rv=( $stmt->num_rows > 0 ) ? 'Sorry, that Username already exists!' : $this->addUser( $username, $password );
    }
    $stmt->free_result();
    $stmt->close();
    echo $rv;
}


function addUser( $username, $password ){
    $db=$this->connection;/* No need for assert now, if the script gets here the db conn must exist */

    $sql = "insert into `users` (`username`, `password`) values (?,?);";
    $stmt = $db->prepare( $sql );

    $stmt->bind_param('ss', $username, $password );

    return $stmt->execute() ? 'You have been registered!' : 'Sorry, there was a problem';
}

对原文作一些小改动:

function ensureUsername( $username=false, $password=false ){
    $rv=false;/* Return Value */
    if( !assert( $this->connection ) or !$username or !$password ) return $rv;
    $db=$this->connection;/* shorthand for laziness */


    $sql = "select `username` from `users` where `username`=?;";
    $stmt = $db->prepare( $sql );
    $stmt->bind_param('s', $username );
    $res = $stmt->execute();
    $stmt->store_result();

    if( $res ){
        $rv=( $stmt->num_rows > 0 ) ? 'Sorry, that Username already exists!' : $this->addUser( $username, $password );
    }
    $stmt->free_result();
    $stmt->close();
    echo $rv;
}


function addUser( $username, $password ){
    $db=$this->connection;/* No need for assert now, if the script gets here the db conn must exist */

    $sql = "insert into `users` (`username`, `password`) values (?,?);";
    $stmt = $db->prepare( $sql );

    $stmt->bind_param('ss', $username, $password );

    return $stmt->execute() ? 'You have been registered!' : 'Sorry, there was a problem';
}


写了几乎相同的答案,就是这样。这是我最初尝试的,是的,但后来我得到了以下错误:警告:mysqli_num_rows()期望参数1是mysqli_result,第60行的C:\Users\ReallySorry\PhpstormProjects\NoteAppMongo\DBHandler.php中给出的布尔值Username是免费的!致命错误:在C:\Users\ReallySorry\PhpstormProjects\NoteAppMongo\DBHandler.php的第73行调用布尔值上的成员函数bind_param()。恐怕您不能在这里使用
mysqli_num_rows()
。如果看不到代码的其余部分,就很难确定,但我怀疑您应该使用
num_rows
as。我添加了完整的DBHandler类,也许它有助于识别错误。感谢您目前的回答:)您是否按照我的建议尝试使用了
num_rows
?我提供的链接确实给出了您想要的确切示例。我写了几乎相同的答案,就是这样。这是我最初尝试的,是的,但后来我得到了以下错误:警告:mysqli_num_rows()期望参数1是mysqli_result,第60行C:\Users\ReallySorry\PhpstormProjects\NoteAppMongo\DBHandler.php中给出的布尔值Username是免费的!致命错误:在C:\Users\ReallySorry\PhpstormProjects\NoteAppMongo\DBHandler.php的第73行调用布尔值上的成员函数bind_param()。恐怕您不能在这里使用
mysqli_num_rows()
。如果看不到代码的其余部分,就很难确定,但我怀疑您应该使用
num_rows
as。我添加了完整的DBHandler类,也许它有助于识别错误。感谢您目前的回答:)您是否按照我的建议尝试使用了
num_rows
?我提供的链接确实给出了你想要的确切例子。你有问题,这是真的,但你知道吗?我在这里看到过很多人将PHP变量直接推到SQL语句中,这让我担心web开发的未来。你已经遥遥领先,所以不要担心遇到小问题:你做得很好!你确实有问题,但你知道吗?我在这里看到过很多人将PHP变量直接推到SQL语句中,这让我担心web开发的未来。你已经遥遥领先,所以不要担心遇到小问题:你做得很好!谢谢你的回答。如果我复制并粘贴该代码,它会显示:使用未定义的函数execute(),抱歉
ReallySorry
-我将execute附加到了错误的对象。我仍然会在第60行的If($result->num rows>=1)处收到“注意:尝试获取C:\Users\ReallySorry\PhpstormProjects\NoteAppMongo\DBHandler.php中非对象的属性”{我真傻。
$stmt->execute()返回的结果
是真是假,不是一个记录集~以前就应该看到的。我在上面做了一些编辑-希望这会有帮助…它工作xD我希望我遇到的问题不是太愚蠢…非常感谢您的时间。感谢您的回答。如果我复制并粘贴了该代码,它会说:使用未定义的函数execute()抱歉
ReallySorry
-我将execute附加到了错误的对象。我仍然在第60行的“通知:尝试获取C:\Users\ReallySorry\PhpstormProjects\NoteAppMongo\DBHandler.php中的非对象属性”:if($result->num rows>=1){ah傻瓜我。
$stmt->execute()返回的结果
是真是假,不是一个记录集~以前应该看到过。我在上面做了一些编辑-希望这会有帮助…它工作xD我希望我遇到的问题不是太愚蠢…非常感谢您的时间。