问题描述
我试图在我的新建表中插入一行,但是它返回false。查看Prestashop开发文档,我可以看到Db::getInstance
返回的对象是function to insert
。
我还可以看到在此示例中使用了pSQL()
方法,我假设该方法在将输入注入SQL查询之前将其剥离。 (奇怪的是为什么他们不仅使用准备好的语句,而且还是要使用它。)
我当前的代码如下:
public function install()
{
if(!\Db::getInstance()->execute(
'CREATE TABLE IF NOT EXISTS `' . self::DB_PREFIX . 'iezon_portfolio` ('
. ' `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,'
. ' `img_link` VARCHAR (120) NOT NULL,'
. ' `title` VARCHAR (80) NOT NULL,'
. ' `description` VARCHAR(1024) NOT NULL,'
. ' `created_on` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,'
. ' `company_name` VARCHAR(30) NOT NULL,'
. ' `company_url` VARCHAR(80) NOT NULL,'
. ' `testimonial` VARCHAR(255) NOT NULL,'
. ' PRIMARY KEY(`id`)'
. ' ) ENGINE=' . self::SQL_ENGINE . ' DEFAULT CHARSET="utf8";'
)) {
# Table gets inserted fine
return false;
}
if(!$this->create(
'/img/prestashop-logo-1578759072.jpg','My First Testimonial','Lorem ipsum dolor sit amet conse ctetur adipisicing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim.','Lorem Ipsum','#',sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim.'
)) {
return false; # This returns false,no row was created
};
return parent::install();
}
public function create( $img,$title,$description,$company,$company_url,$testimonial )
{
return \Db::getInstance()->insert(self::DB_PREFIX . 'iezon_portfolio',array(
'img_link' => pSQL($img),'title' => pSQL($title),'description' => pSQL($description),'company_name' => pSQL($company),'company_url' => pSQL($company_url),'testimonial' => pSQL($testimonial)
));
}
似乎insert()
由于某种原因而失败。谁能指出我正确的方向?我是使用Prestashop的新手。
解决方法
您无需将DB_PREFIX
与insert
方法一起使用,PrestaShop前缀会自动添加