【问题标题】:Why do the line breaks dissapear when given to mysqli_query?为什么给mysqli_query时换行符会消失?
【发布时间】:2016-09-04 06:37:12
【问题描述】:

当我将其粘贴到相关数据库的 phpmyadmin 查询窗口中时,插入触发器的此查询有效。但是当我尝试使用 mysqli_query 向数据库查询时,换行符似乎消失了,导致它失败。

代码:

$TriggerQwry = 'Delimiter $$

                DROP TRIGGER IF EXISTS sign_chat;

    $$

    CREATE TRIGGER sign_chat BEFORE INSERT ON dark_taigachat FOR EACH ROW BEGIN

    IF (INSTR(NEW.message,"(") != 1) THEN

    SET NEW.message = CONCAT("(MC) ", NEW.message);

    END IF ;

    END ;';

    $DBConnect = mysqli_connect("localhost", "root", "************");
        mysqli_set_charset($DBConnect, "utf8");
        mysqli_select_db($DBConnect, 'minecraft_xenforo');                          

        $QueryResult = mysqli_query($DBConnect, $TriggerQwry);
        if($QueryResult) 
        {
            $result = mysqli_affected_rows($DBConnect);
        }
        else 
        {
            $result = 0; 
            echo "<p>Unable to execute the query.[".$TriggerQwry."]</p>" 
            . "<p>Error code " . mysqli_errno($DBConnect)
            . ": " . mysqli_error($DBConnect) . "</p>";
        }
        echo "Result[$Result]";
        mysqli_close($DBConnect);

输出:

Unable to execute the query.[Delimiter $$ DROP TRIGGER IF EXISTS sign_chat; $$ CREATE TRIGGER sign_chat BEFORE INSERT ON dark_taigachat FOR EACH ROW BEGIN IF (INSTR(NEW.message,"(") != 1) THEN SET NEW.message = CONCAT("(MC) ", NEW.message); END IF ; END ;]

Error code 1064: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'Delimiter $$ DROP TRIGGER IF EXISTS sign_chat; $$ CREATE ' at line 1

我还尝试在 TriggerQwry 字符串上使用全引号 "" 和 \n 和 \n\r 和 \r\n,但结果都相同。

这是怎么回事?!

【问题讨论】:

    标签: php mysql sql line-breaks


    【解决方案1】:

    您实际上是在尝试使用 MySQLi 的 multi_query,但是 MySQLi 不处理分隔符。您应该将两个查询分开,这样您就不需要分隔符了。

    试试:

    <?php
    $DBConnect = mysqli_connect("localhost", "root", "************");
    mysqli_set_charset($DBConnect, "utf8");
    mysqli_select_db($DBConnect, 'minecraft_xenforo'); 
    
    $sql = "DROP TRIGGER IF EXISTS sign_chat";
    $DBConnect->query($sql);
    
    $sql = "
    CREATE TRIGGER sign_chat BEFORE INSERT ON dark_taigachat 
      FOR EACH ROW BEGIN
        IF (INSTR(NEW.message,"(") != 1) THEN
            SET NEW.message = CONCAT("(MC) ", NEW.message);
        END IF ;
      END
    ";
    $DBConnect->query($sql);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 2020-05-08
      • 2018-06-06
      • 2011-06-04
      相关资源
      最近更新 更多