该代码通过所有调试,但是由于某种原因,它仍然没有插入。它尝试检查用户名是否已存在于数据库中,如果不存在,则将其添加。由于某种原因,它仍然不会将其添加到数据表中。它确实到达了插入部分,但没有添加行。
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()而不应绑定两次或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);来源:stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。