You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PHP CLI CRUD应用中用fgets(STDIN)替代$_POST

把PHP CLI CRUD改成终端输入形式的解决方案

没问题!我来帮你把这个CLI应用改成用终端提示输入的形式,替换掉原来网页端的$_POST逻辑,同时还会帮你修复几个小问题,比如SQL注入风险和字段不匹配的问题。

首先,咱们先理清楚核心需求:在CLI里让用户一步步输入公司信息,然后调用addCompany函数把数据存入数据库。下面是修改后的完整代码,我会逐部分解释:

<?php
echo "Welcome to Company Register App" . "\n\n";

// 数据库连接配置
define("DB_SERVER", "localhost");
define("DB_USER", "root");
define("DB_PASSWORD", "root");
define("DB_NAME", "mydatabase");

// 创建数据库连接
$mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME);
if ($mysqli === false) {
    die("Sorry, there seems to be a connection issue: " . $mysqli->connect_error);
} else {
    echo "We are connected". "\n\n";
}

/**
 * 添加公司信息到数据库
 * @param mysqli $dbConn 数据库连接对象
 */
function addCompany($dbConn) {
    // 提示用户输入信息,用trim去掉fgets自带的换行符
    echo "Enter Company Name: ";
    $name = trim(fgets(STDIN));
    
    echo "Enter Company Code: ";
    $code = trim(fgets(STDIN));
    
    echo "Enter Company Phone: ";
    $phone = trim(fgets(STDIN));
    
    echo "Enter Comment (optional): ";
    $comment = trim(fgets(STDIN));

    // 使用预处理语句防止SQL注入,这比直接拼接字符串安全得多
    // 注意:这里的表名改成你实际的表名,原代码里写的mydatabase应该是库名不是表名
    $sql = "INSERT INTO companies (name, code, phone, comment) VALUES (?, ?, ?, ?)";
    $stmt = $dbConn->prepare($sql);
    // 绑定参数:s代表字符串类型,四个参数对应四个?
    $stmt->bind_param("ssss", $name, $code, $phone, $comment);

    if ($stmt->execute()) {
        echo "\nCompany added successfully!";
    } else {
        echo "\nError adding company: " . $stmt->error;
    }

    // 关闭语句和连接
    $stmt->close();
}

// 调用添加函数
addCompany($mysqli);

// 关闭数据库连接
$mysqli->close();
?>

关键修改点说明:

  • 替换$_POST为CLI输入:用fgets(STDIN)读取终端输入,搭配trim()去掉输入末尾的换行符,避免存入数据库的内容带多余换行。
  • 数据库连接传参:把$mysqli对象传到addCompany函数里,避免使用全局变量,代码更规范易维护。
  • 修复SQL语句错误:原代码里的INSERT字段和值不匹配(写了email字段但没有对应变量),我这里假设你的表结构是companies(你可以改成自己的实际表名),如果你的表有email字段,只需要加一个echo "Enter Company Email: "; $email = trim(fgets(STDIN));,然后修改SQL语句和绑定参数即可。
  • 防止SQL注入:用预处理语句prepare()和bind_param(),不管用户输入什么特殊字符,都不会破坏SQL结构,安全性更高。

运行方式:

把代码保存为company_register.php,然后在终端里运行:

php company_register.php

之后就会看到一步步的输入提示,按要求输入信息即可完成添加。

内容的提问来源于stack exchange,提问作者dotty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:52:42