Вставка данных с помощью mysqli

Этот код проходит через все отладки, но по какой-то причине он все равно не вставляет. Он пытается проверить, существует ли имя пользователя в базе данных, а если нет, оно добавляет его. По какой-то причине он по-прежнему не добавляет его в таблицу данных. Он добирается до части вставки, но не добавляет строку.

<?php require "conn.php"; echo "debug 1"; $stmt = $conn->prepare("SELECT * FROM UserData WHERE username = ?"); $stmt->bind_param('s', /*$_POST["username"]*/ $username ); $username = 'hi'; $stmt->execute(); $stmt->store_result(); echo "debug 2"; if ($stmt->num_rows == 0){ // username not taken echo "debug 3"; $stmt2 = $conn->prepare("INSERT INTO UserData (username, password) VALUES (?, ?)"); $password =(/*$_POST["password"]*/ "hey"); $username =(/* $_POST["username"]*/ "hi"); $stmt2->bind_param('s',$username); $stmt2->bind_param('s',$password); $stmt2->execute(); if ($stmt2->affected_rows == 1){ echo 'Insert was successful.'; }else{ echo 'Insert failed.'; var_dump($stmt2); } }else{ echo 'That username exists already.';} ?> 

Solutions Collecting From Web of "Вставка данных с помощью mysqli"

Вы должны связывать все переменные один раз с помощью bind_param() а не дважды или N раз. Правильный способ – передать сначала типы, за которыми следуют переменные.

изменение:

 $stmt2->bind_param('s',$username); $stmt2->bind_param('s',$password); 

От

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

С помощью php5.6> = вы можете передать массив с ... оператором для упрощения.

 $data = array('user' => 'someUser', 'password' => 'secret'); $stmt2->bind_param('ss', ...$data);