此代码通过所有调试但由于某种原因,它仍然没有插入。它会尝试检查数据库中是否已存在用户名,如果没有,则会添加该用户名。出于某种原因,它仍然没有将它添加到数据表中。它确实到达插入部分,但它不会添加一行。
<?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.';}
?>
答案 0 :(得分:1)
您应该使用bind_param()
绑定所有变量一次,而不是两次或N次。正确的方法是首先传递变量后跟的类型。
变化:
$stmt2->bind_param('s',$username);
$stmt2->bind_param('s',$password);
通过
$stmt2->bind_param('ss',$username, $password);
使用php5.6&gt; =您可以使用...
运算符传递数组以进行简化。
$data = array('user' => 'someUser', 'password' => 'secret');
$stmt2->bind_param('ss', ...$data);