что не так с этим кодом - PullRequest
       6

что не так с этим кодом

0 голосов
/ 15 апреля 2011
class MyClass {

    private $db;

    // Constructor 
    function __construct() {
        $this->db = new mysqli('localhost', 'root', 'root', 'Test_db');
        $this->db->autocommit(FALSE);
    }

    // Destructor 
    function __destruct() {
        $this->db->close();
    }

    // Main method 
    function MyFun() {

        // Check for required parameters
        if (isset($_POST["name"]) && isset($_POST["username"]) && isset($_POST["password"]) && isset($_POST["email"])) {
        echo "Before \n";
        $name = $_POST["name"];
        $username = $_POST["username"];
        $password = $_POST["password"];
        $email = $_POST["email"];
        $activation = 0;
        echo "After \n";
            // tracking 
            $stmt = $this->db->prepare("INSERT INTO users (name, username, password, email,activation) VALUES (?, ?, ?, ?, ?)");
            $stmt->bind_param("is", $name, $username, $password, $email, $activation); //Line 95
            $stmt->execute();
            $stmt->close();

        }

Выход:

До

* После 1008 *

Неверный запрос

Консоль MAMP:

[15-Apr-2011 15:09:10] PHP Warning:  mysqli_stmt::bind_param() [<a href='function.mysqli-stmt-bind-param'>function.mysqli-stmt-bind-param</a>]: Number of elements in type definition string doesn't match number of bind variables in /Applications/MAMP/htdocs/Test/reg.php on line 95

Номер тот же, но я не знаю, почему появляется эта ошибка

Ответы [ 3 ]

4 голосов
/ 15 апреля 2011
$stmt->bind_param("is", $name, $username, $password, $email, $activation);

Ваша строка "Definition" ("is") содержит только два определения, целое число и строку ... у вас должно быть там 5.

$stmt->bind_param("sssss", $name, $username, $password, $email, $activation);

... например ...

2 голосов
/ 15 апреля 2011

В вашем запросе только пять ? заполнителей, но вы пытаетесь привязать к запросу шесть значений.$ stmt-> bind_param ("is", $ name, $ username, $ password, $ email, $ активация);

  1. "is"
  2. $ name
  3. $ username
  4. $ пароль
  5. $ email
  6. $ активация

Формат, который вы даете, содержит только 2 определения, но этодолжен содержать 5, чтобы соответствовать вашему запросу.Попробуйте "sssss".

1 голос
/ 15 апреля 2011

«is» является шестой переменной, я предлагаю вам удалить это или добавить имя поля в операторе:

$stmt->bind_param("is", $name, $username, $password, $email, $activation);

Либо удалить из bind_param:

$stmt = $this->db->prepare("INSERT INTO users (name, username, password, email,activation) VALUES (?, ?, ?, ?, ?)");
$stmt->bind_param($name, $username, $password, $email, $activation);

, либодобавить к именам полей:

$stmt = $this->db->prepare("INSERT INTO users (**is**, name, username, password, email,activation) VALUES (?, ?, ?, ?, ?)");
$stmt->bind_param("**is**", $name, $username, $password, $email, $activation);

или $ stmt = $ this-> db-> prepare ("ВСТАВИТЬ INTO пользователей (имя, имя пользователя, пароль,
электронная почта, активация) ЗНАЧЕНИЯ (?,?,?,?,?) ");$ stmt-> bind_param ("issss", $ name, $ username, $ password, $ email, $ активации);

...