首页 > 解决方案 > 为什么mysqli将字符串设置为0?

问题描述

我正在尝试使用已发布到 PHP 的数据更新表。它从表单中获取所有值并输入它们,除了 emp_firstName。Emp_firstName 在数据库中始终更新为“0”,而其余的则获得正确的值。

emp_edit.php:

<?php
include '../part1/DBConnection.php';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  if (!($result = $conn->prepare("UPDATE employees SET emp_firstName=?, emp_lastName=?, emp_middleName=?, emp_type=?, emp_initialLevel=?, emp_hireDate=?, emp_gender=?, emp_birthDate=?, emp_passwd=? WHERE emp_id=?"))) {
    echo "Prepare failed: (" . $result->errno . ") " . $result->error;
  }
  if (!$result->bind_param("isssssssss", $emp_firstName, $emp_lastName, $emp_middleName, $emp_type, $emp_initialLevel, $emp_hireDate, $emp_gender, $emp_birthDate, $emp_passwd, $emp_id)) {
    echo "Binding parameters failed: (" . $result->errno . ") " . $result->error;
  }

  // populate param vars
  if (isset($_POST['emp_firstName'])) {
    $emp_firstName = $_POST['emp_firstName'];
  }
  if (isset($_POST['emp_lastName'])) {
    $emp_lastName = $_POST['emp_lastName'];
  }
  if (isset($_POST['emp_middleName'])) {
    $emp_middleName = $_POST['emp_middleName'];
  }
  if (isset($_POST['emp_type'])) {
    $emp_type = $_POST['emp_type'];
  }
  if (isset($_POST['emp_initialLevel'])) {
    $emp_initialLevel = $_POST['emp_initialLevel'];
  }
  if (isset($_POST['emp_hireDate'])) {
    $emp_hireDate = $_POST['emp_hireDate'];
  }
  if (isset($_POST['emp_gender'])) {
    $emp_gender = $_POST['emp_gender'];
  }
  if (isset($_POST['emp_birthDate'])) {
    $emp_birthDate = $_POST['emp_birthDate'];
  }
  if (isset($_POST['emp_passwd'])) {
    $emp_passwd = $_POST['emp_passwd'];
  }
  if (isset($_POST['emp_id'])) {
    $emp_id = $_POST['emp_id'];
  }


  $result->execute();

  print_r($_POST);
  
  $conn->close();
}

这是打印 POST 数组的结果(注意 firstName 未设置为 0):

Array ( [emp_id] => 2 [emp_firstName] => John [emp_lastName] => Doe [emp_middleName] => M [emp_type] => FT [emp_initialLevel] => 1 [emp_hireDate] => 2021-03-10 [emp_gender] => M [emp_birthDate] => 1990-02-27 [emp_passwd] => 123 ) 

结果:

  2 | 0             | Doe          | M              | FT       | 1                | 2021-03-10   | M          | 1990-02-27    | 123

标签: phpmysqli

解决方案


您的$types参数指定第一个字符应为整数:

isssssssss
^
|
Means integer

只需将其设为字符串即可:

ssssssssss

参考:https ://www.php.net/manual/en/mysqli-stmt.bind-param.php


推荐阅读