使用mysqli插入数据

这段代码通过了所有的debugging,但由于某种原因,它仍然没有插入。 它试图检查用户名是否已经存在于数据库中,如果不存在,则将其添加。 出于某种原因,它仍然不会将其添加到数据表中。 它确实到达插入部分,但不会添加一行。

<?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.';} ?> 

你应该用bind_param()绑定所有variables一次,而不是两次或N次。 正确的方法是先传递variables的types。

更改:

 $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);