如何从带有 php mysqli 类的文件中运行和导入多条语句 mysql 查询,并更改分隔符

问题描述

我在 PHP MysqL查询导入方面有一个非常大的问题。我将使用 MysqLi 作为我的数据库驱动程序来将我的更新语句导入数据库。 每个人都认为没问题,直到我想创建一个存储过程来处理表上的更改的列控制并且它不起作用。我会收到语法错误,但我的 sql 查询很好,没有任何语法问题。

你能帮我解决这个问题吗?

MysqL

DELIMITER //
CREATE PROCEDURE addColumnInTable(tableName VARCHAR(255),columnName VARCHAR(255),columnDeFinition VARCHAR(255))
BEGIN
   DECLARE columnCount INT;
   SET columnCount = ( SELECT COUNT(*) FROM informatION_SCHEMA.COLUMNS
                  WHERE  TABLE_SCHEMA = DATABASE() AND TABLE_NAME = tableName AND  COLUMN_NAME = columnName);

    IF columnCount = 0 THEN
        SET @alterInstruction = CONCAT('ALTER TABLE ',tableName,' ','ADD COLUMN');
        SET @alterInstruction = CONCAT(@alterInstruction,columnName);
        SET @alterInstruction = CONCAT(@alterInstruction,columnDeFinition);
    
        PREPARE stmt FROM @alterInstruction;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
    END IF;
END //
DELIMITER ; 
CALL addColumnInTable('#__articles','og',"MEDIUMTEXT NOT NULL COLLATE 'utf8_general_ci'");
CALL addColumnInTable('#__articles','views',"INT(11) UNSIGNED NOT NULL DEFAULT '0'");
CALL addColumnInTable('#__articles','likes','dislikes','featured',"ENUM('Y','N') NOT NULL DEFAULT 'N' COLLATE 'utf8_general_ci'");
DROP PROCEDURE IF EXISTS addColumnInTable;

ALTER TABLE `#__articles`
    CHANGE COLUMN `likes` `likes` INT(11) UNSIGNED NOT NULL DEFAULT '0' AFTER `views`,CHANGE COLUMN `dislikes` `dislikes` INT(11) UNSIGNED NOT NULL DEFAULT '0' AFTER `likes`;

PHP

$MysqLi = new MysqLi($this->dbInfo[1],$this->dbInfo[3],$this->dbInfo[4],$this->dbInfo[2]);

// check connection
if (MysqLi_connect_errno())
{
    $result['status'] = 0;
    $result['msg'] = printf("Connect Failed: %s\n",MysqLi_connect_error());
}

try
{
    if(file_exists($filename))
    {
        // get querys file
        $query = file_get_contents($filename);
        $query = $this->setPrefix($query);

        // execute multi query
        if ($MysqLi->multi_query($query))
        {
            while ($MysqLi->next_result()) {;} // flush multi_queries

            if($MysqLi->errno)
            {
                $result['status'] = 0;
                $result['msg'] = $MysqLi->error;
            }
            else
            {
                $result['status'] = 1;
                $result['msg'] = 'ok';
            }
        }
        else
        {
            $result['status'] = 0;
            if($MysqLi->errno)
                $result['msg'] = $MysqLi->error;
            else
                $result['msg'] = 'query have a problem!';
        }

        /* close connection */
        $MysqLi->close();
    }
    else
    {
        $result['status'] = 0;
        $result['msg'] = 'sql file not found!';
    }
}
catch (Exception $ex)
{
    $result['status'] = 0;
    $result['msg'] = $ex->getMessage();
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)