gpt4 book ai didi

php - PDO 和 PHP。未定义索引,但已定义

转载 作者:行者123 更新时间:2023-12-02 22:36:43 25 4
gpt4 key购买 nike

我有一个类:

class Media {
private $media;
private $thumb;
private $slug;
private $info;
private $type;
private $link;
}

然后我尝试使用 PHP PDO 将其保存到数据库中:

$PDO = new PDO("mysql:host=".DBHOST.";dbname=".DB, DBUSER, DBPASS);

$options = array('media' => 'image.jpg',
'thumb' => 'image_thumb.jpg');
$media = new Media($options);

$media = (array)$media;

$STH = $PDO->prepare('INSERT INTO media (media, thumb, slug, info, type, link) values (?, ?, ?, ?, ?, ? )');

$STH->bindParam(1, $media['Mediamedia']);
$STH->bindParam(2, $media['Mediaslug']);
$STH->bindParam(3, serialize($media['Mediainfo'])); //line 150
$STH->bindParam(4, $media['Mediathumb']);
$STH->bindParam(5, $media['Mediatype']);
$STH->bindParam(6, $media['Medialink']);

$STH->execute();

上面的代码产生了 1 个错误:

Notice: Undefined index: Mediainfo in C:\wamp32\www\MM\index.php on line 150

但是 print_r($media); 输出:

Array
(
[Mediamedia] => image.jpg
[Mediathumb] => image_thumb.jpg
[Mediaslug] => image
[Mediainfo] => Array
(
[title] => image.jpg
[alt] => image.jpg
[description] => image.jpg
)
[Mediatype] => .jpg
[Medialink] => 0
)

编辑:修复了第二个错误,就像@deleiftah 所说的那样愚蠢,但仍然存在一个错误。

最佳答案

当您将对象转换为数组时,私有(private)成员和 protected 成员会被破坏。私有(private)成员在类名周围有空字节 \x00。要以这种方式使用它们,您需要:

$STH->bindParam(1, $media["\x00Media\x00media"]);
$STH->bindParam(2, $media["\x00Media\x00slug"]);
$STH->bindParam(3, serialize($media["\x00Media\x00info"]));
$STH->bindParam(4, $media["\x00Media\x00thumb"]);
$STH->bindParam(5, $media["\x00Media\x00type"]);
$STH->bindParam(6, $media["\x00Media\x00link"]);

如果他们是 protected 成员,他们将以 \x00*\x00 开头

此外,您绑定(bind)参数的顺序似乎与插入语句中字段的顺序不匹配。

关于php - PDO 和 PHP。未定义索引,但已定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11368976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com