Uncaught аргументCountError - PullRequest
       3

Uncaught аргументCountError

0 голосов
/ 30 апреля 2018

У меня есть ошибка, здесь говорится, что у меня ошибка uncaught arugmentcount, но я просто следую уроку, в котором нет ошибки, но когда я это делаю, она есть. Я проверил все возможные ошибки даже орфографии и точки с запятой

Неустранимая ошибка: Uncaught ArgumentCountError: слишком мало аргументов для функции database :: bind (), 1 передано в C: \ xampp \ htdocs \ ooplogin \ index.php в строке 15 и как минимум 2 ожидается в C: \ xampp \ HTDOCS \ ooplogin \ классы \ database.php: 35
Трассировка стека:
# 0 C: \ xampp \ htdocs \ ooplogin \ index.php (15): база данных-> привязка (': title,: $ title')
# 1 {main} в C: \ xampp \ htdocs \ ooplogin \ classes \ database.php в строке 35

это мой пример кода для index.php

<?php
require 'classes/database.php';

$database = new database;

$database->query('SELECT * FROM post');
$rows = $database->resultset();

$post = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);

if($post['submit']){
    $title = $post['title'];
    $body = $post['body'];
    $database->query('INSERT INTO post(title, body) VALUE (:title, :body)');
    $database->bind(':title, :$title');
    $database->bind(':body, $body');
    $database->execute();
    if($database->lastInsertId()){
        echo '<p>Post Added!</p>' ;
    }

}

?>
    <h1>Add Post</h1>
    <label>Post Title</label>
    <br />
    <form method="post" action=" <?php $_SERVER['PHP_SELF']; ?>">
        <input type="text" name="title" placeholder="Add Title..">
        <br />
        <label>Post Body</label>
        <br />
        <textarea name="body" cols="30" rows="10"></textarea>
        <br>
        <input type="submit" name="submit" value="submit">
    </form>
    <h1>POSTS</h1>
    <div>
        <?php foreach($rows as $row) : ?>
        <div>
            <h3>
                <?php echo $row['title']; ?>
            </h3>
            <p>
                <?php echo $row['body']; ?>
            </p>
        </div>
        <?php endforeach; ?>
    </div>


and for classes/database.php`

    <?php

class database{
    private $host = 'localhost';
    private $user = 'root';
    private $password = '';
    private $dbname = 'oopdtbs';

    private $dbh;
    private $error;
    private $stmt;



    public function __construct(){
        // Set DSN
        $dsn = 'mysql:host='. $this->host . ';dbname='. $this->dbname;
        // Set Options
        $options = array(
            PDO::ATTR_PERSISTENT        => true,
            PDO::ATTR_ERRMODE       => PDO::ERRMODE_EXCEPTION
        );
        // Create new PDO
        try {
            $this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
        } catch(PDOEception $e){
            $this->error = $e->getMessage();
        }
    }

    public function query($query){
        $this->stmt = $this->dbh->prepare($query);
    }

    public function bind($param, $value, $type = null){
        if(is_null($type)){
            switch(true){
                case is_int($value):
                    $type = PDO::PARAM_INT;
                    break;
                case is_bool($value):
                    $type = PDO::PARAM_BOOL;
                    break;
                case is_null($value):
                    $type = PDO::PARAM_NULL;
                    break;
                    default:
                    $type = PDO::PARAM_STR;
            }
        }
        $this->stmt->bindValue($param, $value, $type);
    }

    public function execute(){
        return $this->stmt->execute();
    }

    public function lastInsertId(){
        $this->dbh->lastInsertId();
    }

    public function resultset(){
        $this->execute();
        return $this->stmt->fetchAll(PDO::FETCH_ASSOC);
    }
}

1 Ответ

0 голосов
/ 30 апреля 2018

Вы передаете только 1 аргумент в ->bind(..) вызовах. Я исправил это и исправил опечатки.

Заменить:

 $database->bind(':title, :$title');
 $database->bind(':body, $body');

С этими строками:

 $database->bind(':title', $title);
 $database->bind(':body', $body);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...