SQL查询无法使用准备好的语句 php [重复] 。

问题描述 投票:0回答:1

我试图创建一个基本的php注册表,但我不明白为什么它不能工作。它一直向我显示错误 "error=sqlerror3" 为sql的if语句,但它就是不在表上插入值。

这是我的表(idTmp有auto_increment)。

CREATE TABLE `users_tmp` (
  `idTmp` int NOT NULL,
  `ipUser` varbinary(17) NOT NULL,
  `cellUser` int NOT NULL,
  `placeUser` longtext NOT NULL,
  `uidUsers` longtext NOT NULL,
  `emailUsers` longtext NOT NULL,
  `pwdUsers` longtext NOT NULL,
  `dataUser` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `stateUser` longtext NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

数据库连接 dbh. inc. php:

<?php

$servername = "localhost";
$username = "root";
$password = "123Ciuronay";
$dbname = "icproducoes_users";

$conn = mysqli_connect($servername, $username, $password, $dbname);

if (!$conn){
    die("Connection failed: " .mysqli_connect_error());
}

Php代码:

<?php


if(isset($_POST['registo'])){
    require 'dbh.inc.php';

$username = mysqli_real_escape_string($conn, $_POST['uid']);
$email = $_POST['email'];
$residencia = $_POST ['res'];
$tel = $_POST['tel'];
$check = $_POST['check1'];

//GETS THE IP

$ip = $_SERVER['REMOTE_ADDR'];

// GENEREATES RANDOM PASSOWRD
function genPassword($length = 6) {
    $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    $count = mb_strlen($chars);

    for ($i = 0, $result = ''; $i < $length; $i++) {
        $index = rand(0, $count - 1);
        $result .= mb_substr($chars, $index, 1);
        $result = strtoupper($result);
    }
    return $result;
}


$password = genPassword();

if(isset($check)){
$check = "YES";

} else {$check = "NO";}



// INSERTS THE VALUES ON DATABASE
$stateUser = "Active";
$sql = "INSERT INTO users_tmp (`ipUser`, `cellUser`, `placeUser`, `uidUsers`, `emailUsers`, `pwdUsers`, `advertising`, `dataUser`, `stateUser`) VALUES ( ?, ?, ?, ?, ?, ?, ? , now(), ?)";

$stmt = mysqli_stmt_init($conn);
if(!mysqli_stmt_prepare($stmt, $sql)){
    header("Location: ../registo-gratis.php?error=sqlerror3");
    exit();

} else {

    mysqli_stmt_bind_param($stmt, "ssssssss",  $ip , $tel, $residencia, $username, $email, $password, $check, $stateUser);
    mysqli_stmt_execute($stmt);
}
}
else{

    echo'  <script>setTimeout(function () {    
        window.location.href = "../registo-gratis.php"; 
    },5000);</script>";';
}
?>
php mysql prepared-statement
1个回答
0
投票

在你的INSERT查询中,你试图修改了 advertising 列,而这个列在你的CREATE TABLE查询中并不存在。结果是,在你的CREATE TABLE查询中不存在该列。mysqli_stmt_prepare 看到你试图写入一个不存在的列,并返回一个错误。

© www.soinside.com 2019 - 2024. All rights reserved.