【问题标题】:PHP - Incorrect integer valuePHP - 不正确的整数值
【发布时间】:2018-07-20 21:25:03
【问题描述】:

我正在为我的网站构建一个扬声器表单,它基本上只是从用户那里获取输入的数据并将其放入数据库中。该网站还允许您保存或提交表单,我检查使用

if(isset($_POST['save'])

我遇到的问题是,当我将一些文本框留空并点击“保存”时,数据库会给出一个错误提示:

( ! ) PDOException: SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'phone_number' at row 1 in C:\wamp64\www\rotarywebsite\speakerform.php on line 98

我检查了代码和数据库,以查看我发现研究的数据库中是否存在拼写错误或其他错误。所以基本上我希望允许用户“保存”表单,同时也将一些文本框留空。这是我的代码和 SQL 格式

PHP 代码

if(isset($_POST['save'])){
         $fullname = trim($_POST['fullname']);
        $phone_number = trim($_POST['phone-number']);
        $cell_day_of = trim($_POST['cell-dayof']);
        $email = trim($_POST['email']);
        $address = trim($_POST['address']);
        $city = trim($_POST['city']);
        $state = trim($_POST['state']);
        $zip = trim($_POST['zip']);
        $titles = trim($_POST['titles']);
        $company = trim($_POST['company']);
        $affiliations = trim($_POST['affiliations']);
        $website = trim($_POST['website']);
        $topic = trim($_POST['topic']);
        $summary = trim($_POST['summary']);
        $availability = trim($_POST['availability']);
        $notice = trim($_POST['notice']);
        $guest = trim($_POST['guest']);
        $materials = trim($_POST['materials']);
        $projector = trim($_POST['projector']);
        $equipment = trim($_POST['equipment']);
        $educating = trim($_POST['educating']);
        $support = trim($_POST['support']);
        $international = trim($_POST['international']);
        $familiar = trim($_POST['familiar']);
        $member = trim($_POST['member']);
        $allergies = trim($_POST['allergies']);
        $bio = trim($_POST['bio']);
        $introduce = trim($_POST['introduce']);
        $last_need = trim($_POST['last-need']);
        $timestamp = time();
        $stmtUpdate = $handler->prepare("INSERT INTO formdata (user_id, fullname, phone_number, cell_dayof, email, address, city, state, zip, titles, company, affiliations, website, topic, summary, availability, notice, guest, materials, projector, equipment, educating, support, international, familiar, member, allergies, bio, introduce, last_need, time_stamp)VALUES(:userid, :fullname, :phone_number, :cell_dayof, :email, :address, :city, :state, :zip, :titles, :company, :affiliations, :website, :topic, :summary, :availability, :notice, :guest, :materials, :projector, :equipment, :educating, :support, :international, :familiar, :member, :allergies, :bio, :introduce, :last_need, :timestamp)");
        $stmtUpdate->bindParam(':userid', $userid, PDO::PARAM_INT);
        $stmtUpdate->bindParam(':fullname', $fullname, PDO::PARAM_STR);
        $stmtUpdate->bindParam(':phone_number', $phone_number, PDO::PARAM_INT);
        $stmtUpdate->bindParam(':cell_dayof', $cell_dayof, PDO::PARAM_INT);
        $stmtUpdate->bindParam(':email', $email, PDO::PARAM_STR);
        $stmtUpdate->bindParam(':address', $address, PDO::PARAM_STR);
        $stmtUpdate->bindParam(':city', $city, PDO::PARAM_STR);
        $stmtUpdate->bindParam(':state', $state, PDO::PARAM_STR);
        $stmtUpdate->bindParam(':zip', $zip, PDO::PARAM_INT);
        $stmtUpdate->bindParam(':titles', $titles, PDO::PARAM_STR);
        $stmtUpdate->bindParam(':company', $company, PDO::PARAM_STR);
        $stmtUpdate->bindParam(':affiliations', $affiliations, PDO::PARAM_STR);
        $stmtUpdate->bindParam(':website', $website, PDO::PARAM_STR);
        $stmtUpdate->bindParam(':topic', $topic, PDO::PARAM_STR);
        $stmtUpdate->bindParam(':summary', $summary, PDO::PARAM_STR);
        $stmtUpdate->bindParam(':availability', $availability, PDO::PARAM_STR);
        $stmtUpdate->bindParam(':notice', $notice, PDO::PARAM_STR);
        $stmtUpdate->bindParam(':guest', $guest, PDO::PARAM_STR);
        $stmtUpdate->bindParam(':materials', $materials, PDO::PARAM_STR);
        $stmtUpdate->bindParam(':projector', $projector, PDO::PARAM_STR);
        $stmtUpdate->bindParam(':equipment', $equipment, PDO::PARAM_STR);
        $stmtUpdate->bindParam(':educating', $educating, PDO::PARAM_STR);
        $stmtUpdate->bindParam(':support', $support, PDO::PARAM_STR);
        $stmtUpdate->bindParam(':international', $international, PDO::PARAM_STR);
        $stmtUpdate->bindParam(':familiar', $familiar, PDO::PARAM_STR);
        $stmtUpdate->bindParam(':member', $member, PDO::PARAM_STR);
        $stmtUpdate->bindParam(':allergies', $allergies, PDO::PARAM_STR);
        $stmtUpdate->bindParam(':bio', $bio, PDO::PARAM_STR);
        $stmtUpdate->bindParam(':introduce', $introduce, PDO::PARAM_STR);
        $stmtUpdate->bindParam(':last_need', $last_need, PDO::PARAM_STR);
        $stmtUpdate->bindParam(':timestamp', $timestamp, PDO::PARAM_INT);
        $stmtUpdate->execute();
    }

SQL

CREATE TABLE `formdata` (
  `id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `fullname` varchar(200) NOT NULL,
  `phone_number` int(200) NOT NULL,
  `cell_dayof` int(200) NOT NULL,
  `email` varchar(200) NOT NULL,
  `address` varchar(300) NOT NULL,
  `city` varchar(300) NOT NULL,
  `state` varchar(300) NOT NULL,
  `zip` int(200) NOT NULL,
  `titles` varchar(200) NOT NULL,
  `company` varchar(200) NOT NULL,
  `affiliations` varchar(200) NOT NULL,
  `website` varchar(200) NOT NULL,
  `topic` varchar(200) NOT NULL,
  `summary` varchar(200) NOT NULL,
  `availability` varchar(200) NOT NULL,
  `notice` varchar(200) NOT NULL,
  `guest` varchar(200) NOT NULL,
  `materials` varchar(200) NOT NULL,
  `projector` varchar(200) NOT NULL,
  `equipment` varchar(200) NOT NULL,
  `educating` varchar(200) NOT NULL,
  `support` varchar(200) NOT NULL,
  `international` varchar(200) NOT NULL,
  `familiar` varchar(200) NOT NULL,
  `member` varchar(200) NOT NULL,
  `allergies` varchar(200) NOT NULL,
  `bio` varchar(200) NOT NULL,
  `introduce` varchar(200) NOT NULL,
  `last_need` varchar(200) NOT NULL,
  `time_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

【问题讨论】:

  • $_POST['phone_number'] 中有一个空字符串。
  • 您不应该将电话号码存储为INT,将它们存储为VARCHAR
  • var_dump($_POST['phone-number']) 显示什么?
  • @Barmar 空字符串在哪里?我会试试的
  • 错误消息显示Incorrect integer value: ''。这意味着您尝试存储到 phone_number 列中的值是 '',这不是数字。

标签: php pdo phpmyadmin


【解决方案1】:

由于phone_number 被声明为INT 字段,因此您必须为其提供有效的整数值,而空字符串不是有效的整数。

您可以将空字符串替换为0

$phone_number = trim($_POST['phone_number']);
if ($phone_number == '') {
    $phone_number = 0;
}

但最好的解决方案是将数据库中的此字段更改为VARCHAR。电话号码并不是真正的数字,它们通常有其他字符,例如+1 (202) 555-1212.

【讨论】:

  • 谢谢你,解决了问题!
【解决方案2】:

您已将数据库中的所有字段设置为 NOT NULL。这意味着插入语句必须包含每个字段的有效值。您需要从您希望成为可选字段的那些字段中删除 NOT NULL 约束。

【讨论】:

  • 我用另一个文件对此进行了测试,它被设置为 NOT NULL,它们发送得非常好
  • 空字符串与NULL不同。
  • NOT NULL 字面意思是必须为该字段插入一个值,否则插入语句将被拒绝。如果它以前有效,那么您一定是在每个字段中插入了一个有效值。
【解决方案3】:

尝试有时从您希望保留为空的属性中删除 NOT NULL。 例如- 尝试改变 - fullname varchar(200) NOT NULL, phone_number int(200) 非空, 到 - fullname varchar(200) , phone_number int (200),

【讨论】:

  • 空字符串与NULL不同。
猜你喜欢
  • 1970-01-01
  • 2021-07-14
  • 1970-01-01
  • 1970-01-01
  • 2020-08-08
  • 2020-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多