使用mysqli插入数据

时间:2017-08-04 19:30:55

标签: php mysql

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

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

?>

1 个答案:

答案 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);