【问题标题】:Inserting data using mysqli使用 mysqli 插入数据
【发布时间】:2017-08-04 19:30:55
【问题描述】:

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

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

?>

【问题讨论】:

  • $stmt2-&gt;bind_param('ss', $username, $password);

标签: php mysql


【解决方案1】:

您应该使用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);

【讨论】:

    猜你喜欢
    • 2011-01-09
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 2018-08-11
    • 2014-07-26
    • 2016-01-25
    • 2015-02-27
    • 1970-01-01
    相关资源
    最近更新 更多