Php Insert into table-错误:调用本机函数';md5和x27;

Php Insert into table-错误:调用本机函数';md5和x27;,php,mysql,md5,Php,Mysql,Md5,我正在尝试构建一个php表单,将用户插入用户表。 用户名和用户电子邮件将通过HTML表单手动输入,同时随机生成用户密码。 这是我的代码: <?php if (isset($_POST['insert'])) { require_once 'dblogin.php'; $OK = false; $conn = new mysqli ($host, $user, $password, $database) or die("Connection Failed"); $stmt =

我正在尝试构建一个php表单,将用户插入用户表。 用户名和用户电子邮件将通过HTML表单手动输入,同时随机生成用户密码。 这是我的代码:

<?php
if (isset($_POST['insert'])) {
require_once 'dblogin.php'; 

  $OK = false;
  $conn = new mysqli ($host, $user, $password, $database) or die("Connection Failed");
  $stmt = $conn->stmt_init();


  $sql = 'INSERT INTO users (user_email, user_name, user_password)
          VALUES(?, ?, des_encrypt(substring (md5(rand(),1,8))))';
  if ($stmt->prepare($sql)) {
    // bind parameters and execute statement
    $stmt->bind_param('sss', $_POST['user_email'], $_POST['user_name'], $_POST['user_password']);
    // execute and get number of affected rows
    $stmt->execute();
    if ($stmt->affected_rows > 0) {
      $OK = true;
    }
  }
  if ($OK) {
    header('Location: confirm.php');
    exit;
  } else {
    $error = $stmt->error;
  }
}
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Add User</title>
</head>

<body>
<h1>Add User</h1>
<?php if (isset($error)) {
  echo "<p>Error: $error</p>";
} ?>
<form id="form1" method="post" action="">
  <p>
    <label for="user_email">User email:</label>
    <input name="user_email" type="text" class="widebox" id="user_email">
  </p>
    <p>
    <label for="user_name">User name:</label>
    <input name="user_name" type="text" class="widebox" id="user_name">
  </p>
  <p>
    <input type="submit" name="insert" value="Register New User" id="insert">
  </p>
</form>
</body>
</html>

添加用户
添加用户

用户电子邮件:

用户名:

我得到的错误是:错误:调用本机函数“md5”时参数计数不正确。我是一个初学者,我从未使用过md5,有人能帮我吗?
谢谢

我想你是想这么做

SUBSTRING( MD5( RAND( ) ) , 1, 8 ) 
而不是

substring (md5(rand(),1,8))
您的查询应该是这样的

$sql = 'INSERT INTO users (user_email, user_name, user_password)
      VALUES (?, ?, DES_ENCRYPT( SUBSTRING( MD5( RAND( ) ) , 1, 8 ) ) )';

我从未使用过mysqli。。但是,错误是“参数计数不正确”。。如果您查看代码:

(用户电子邮件、用户名、用户密码)
-共3列 和
(?,?,des_encrypt(子字符串(md5(rand(),1,8)))
。。3列

vs:

$stmt->bind_-param('sss',$_-POST['user\u-email'],$_-POST['user\u-role'],$_-POST['user\u-password'])。4个参数

删除
“sss”

另外,看看匹配的内容,实际上,一旦你删除了
“sss”
,你仍然会发布: user\u email=$\u POST['user\u email'] user\u password=$POST['user\u role']

所以你必须做到这一点


`$stmt->bind_参数($_POST['user_email'],$_POST['user_name'])

问题在这里:

$sql = 'INSERT INTO users (user_email, user_name, user_password)
          VALUES(?, ?, des_encrypt(substring (md5(rand(),1,8))))';
MD5只接受一个参数—要散列的字符串

试试这个:

    $sql = 'INSERT INTO users (user_email, user_name, user_password)
          VALUES(?, ?, des_encrypt(substring(md5(rand()),1,8)))';    

谢谢,当我尝试这样做时,它说:调用本机函数“rand”时参数计数不正确。我正在尝试随机设置一个包含8个字符的密码!我收到以下错误:警告:mysqli_stmt::bind_param()[mysqli stmt.bind param]:变量数量与此行准备语句中的参数数量不匹配:$stmt->bind_param('sss',$_POST['user_email'],$_POST['user_name'],$_POST['user_password'];我不应该使用“s”作为用户密码吗?谢谢,我尝试了这个,但它给出了这个错误:错误:函数测试。子字符串不存在。检查参考手册中的“函数名解析和解析”部分,避免
子字符串和包含其参数的括号之间出现空格。我已经更新了答案。不要在函数名和包含其参数的括号之间添加空格。SQL.great中不允许完美运行,尽管我现在在php表单中遇到另一个问题,但不确定您是否可以帮助它给出此错误:警告:mysqli_stmt::bind_param()[mysqli stmt.bind param]:变量数与准备中的参数数不匹配statement@elmify你说密码是随机生成的。那为什么要发布[用户密码]
?在查询中有两个
,在
bind_param
调用中传递3个变量。删除
$\u POST['user\u password']
或将查询更改为
插入用户(用户电子邮件、用户名、用户密码)值(?、des\u encrypt(?)