- 主题:一个PHP的问题请教
if (empty($userInfo['car_type']) && $content !== '' && str_starts_with($content, '车型'))
这句里边,数据库里car_type默认值是null,测试时给content的内容是“车型黑色SUV”,为啥就进不到这个分支呢?
AI也说条件都满足了,但是实测无论如何都进不去哈,别的字段可以写进去数据库
求大佬们帮忙分析一下
--
FROM 106.38.48.*
几种可能,cartype是字符串null
content的字符编码不对
【 在 jansea (沧浪客) 的大作中提到: 】
: if (empty($userInfo['car_type']) && $content !== '' && str_starts_with($content, '车型'))
: 这句里边,数据库里car_type默认值是null,测试时给content的内容是“车型黑色SUV”,为啥就进不到这个分支呢?
: AI也说条件都满足了,但是实测无论如何都进不去哈,别的字段可以写进去数据库
: 求大佬们帮忙分析一下
--
FROM 123.121.208.*
var_dump 变量看看
【 在 jansea 的大作中提到: 】
: if (empty($userInfo\['car\_type'\]) && $content !== '' && str\_starts_with($content, '车型'))
: 这句里边,数据库里car_type默认值是null,测试时给content的内容是“车型黑色SUV”,为啥就
: ..................
发自「今日水木 on 2304FPN6DC」
--
FROM 183.241.167.*
Trae推荐用了
error_log("[Debug] carType: " . var_export($carType, true));
结果是
PHP message: [Debug] carType: NULL
既然知道是null,为啥我用的
if ($carType === null && ($content = $trimmedContent) !== '' && $startsWithCarType)
却进不去这个分支呢,头疼了哈,还是缺乏编程基础
【 在 wjjchen 的大作中提到: 】
: var_dump 变量看看
: 发自「今日水木 on 2304FPN6DC」
--
FROM 183.241.167.*
数据库里car_type的定义是:
| Field | Type | Null | Key | Default | Extra |
+-----------------------+---------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| user_id | varchar(50) | NO | | NULL | |
| nickname | varchar(50) | YES | | NULL | |
| fare | decimal(10,2) | NO | | 0.00 | |
| is_driver | tinyint(1) | NO | | 0 | |
| car_type | varchar(50) | YES | | NULL | |
其他字段也有varchar(50)的,都没这个问题哈,太烧脑了
【 在 diaozi 的大作中提到: 】
: 几种可能,cartype是字符串null
: content的字符编码不对
--
FROM 183.241.167.*
问题都能写出来,可以直接问ai
【 在 jansea (沧浪客) 的大作中提到: 】
: if (empty($userInfo['car_type']) && $content !== '' && str_starts_with($content, '车型'))
: 这句里边,数据库里car_type默认值是null,测试时给content的内容是“车型黑色SUV”,为啥就进不到这个分支呢?
: AI也说条件都满足了,但是实测无论如何都进不去哈,别的字段可以写进去数据库
: 求大佬们帮忙分析一下
--
FROM 112.17.237.*
AI让检查数据库编码问题,我查了,所有的编码都是utf8mb4
文件编码也查了,utf-8
还没想到更好的办法
【 在 ihomd 的大作中提到: 】
: 问题都能写出来,可以直接问ai
--
FROM 183.241.167.*
去debug啊。。。
【 在 jansea 的大作中提到: 】
: AI让检查数据库编码问题,我查了,所有的编码都是utf8mb4
: 文件编码也查了,utf-8
: 还没想到更好的办法
: ...................
--
FROM 157.254.20.*
如果编辑器不支持 debug 就把条件检测里面的所有变量都打印一下。
【 在 jansea 的大作中提到: 】
: Trae推荐用了
: error\_log("\[Debug\] carType: " . var\_export($carType, true));
: 结果是
: PHP message: \[Debug\] carType: NULL
: 既然知道是null,为啥我用的
:
: ..................
发自「今日水木 on 2304FPN6DC」
--
FROM 183.241.167.*
是的,打印出来看,都是满足条件的哈
报的错是:
Uncaught PDOException: SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xA6\xE5\x9E\x8B\xE8\xB0...' for column 'car_type' at row 1 in /var/www/html/Database.php:245
看似编码的问题,但查了数据库编码,PDO的charset都是utf8mb4.
要说是中文的问题吧,别的字段也有中文字符,用empty()也没问题
private function __construct() {
try {
$dsn = "mysql:host=" . DB_HOST . ";dbname=" . DB_NAME . ";charset=utf8mb4";
$this->pdo = new PDO($dsn, DB_USER, DB_PASS);
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch (PDOException $e) {
$errorMsg = date('Y-m-d H:i:s') . " - 数据库连接失败:" . $e->getMessage() . "\n";
error_log($errorMsg, 3, 'debug.log');
throw new Exception("数据库连接失败");
}
}
这些都是AI给的代码,我自己调整的都是大逻辑方面的
【 在 wjjchen 的大作中提到: 】
: 如果编辑器不支持 debug 就把条件检测里面的所有变量都打印一下。
: :
: 发自「今日水木 on 2304FPN6DC」
--
FROM 183.241.167.*