【问题标题】:print_r an insert statement php pdoprint_r 插入语句 php pdo
【发布时间】:2015-06-09 11:30:46
【问题描述】:

我正在使用这种方法将数据插入到我的数据库中:

function insertMenue($content, $date) {
    $session = $_SESSION['aid'];
    global $pdo;
    $pdo->exec('SET CHARACTER SET utf8');
    $query = $pdo->prepare('INSERT INTO menue(type, content, date, creator) VALUE (?,?,?,?)');
    $query->bindValue(1, "menue");
    $query->bindValue(2, "<p>" . $content . "</p>");
    $query->bindValue(3, $date);
    $query->bindValue(4, $session);
    $query->execute(); 
}

我正在为数组中的每个对象调用此方法。现在每次应该有一个包含元音变音(ä,ö,ü)的字符串时,字符串会在元音变音应该是的地方被切断。

例如我在写:

<p>Salat<br>Gemüse und Teigwaren</p>

数据库中的数据恰好是:

<p>Salat<br>Gem

现在的问题是:

  1. 我怎样才能 print_r() 整个 sql 语句?

    print_r($query->execute());

将显示 (1,1,1,1)

我想要类似的东西: (菜单, (p)Salat(br)Gemüse und Teigwaren(/p), 2015-09-06, 2)

我不确定它是否没有到达数据库或数据库是否有问题。 db 本身可以处理变音符号并用 utf-8 编写。我转储文件并仔细查看它,它应该没有损坏。

【问题讨论】:

  • 您可以在到达 SQL 块之前打印 $date$session - 但请查看 PHP PDO 的文档 - php.net/manual/en/pdostatement.bindvalue.php - 尝试规定您想要的类型插入(例如$query-&gt;bindValue(1, "menue", PDO::PARAM_STR);
  • 如果您在数据库中使用真正的预准备语句,则没有“完整语句”。你有你的占位符查询,你有你的价值观。这个问题几乎可以肯定是编码问题,您实际上并没有将 UTF-8 编码的数据发送到数据库。

标签: php mysql pdo


【解决方案1】:

您看不到完整的查询,因为它不存在于 PHP 端。

PHP 在使用准备好的语句时首先发送查询,然后发送参数 (不知道当仿真模式开启时会发生什么)。

如果您想查看最终查询,您应该启用数据库的查询日志并在那里查看。

这是使用 PHP 可以获得的最接近的结果: http://us2.php.net/manual/en/pdostatement.debugdumpparams.php

【讨论】:

    【解决方案2】:

    试试这个...

    function insertMenue($content, $date) {
    
        $session = $_SESSION['aid'];
    
        global $pdo;
        $pdo->exec('SET CHARACTER SET utf8');
    
        $params = ["menue", "<p>$content</p>", $date, $session];
    
        // Check all your params are set...
        // Although you may want to consider checking these before entering this block
        print_r($params);
    
        $sql = "INSERT INTO menue( type
                                 , content
                                 , date
                                 , creator
                                 )
                VALUES( ?
                      , ?
                      , ?
                      , ?
                      )";
        try {
            $sth = $pdo->prepare($sql);
            $sth->execute($params); 
        } catch (PDOException $e) {
            throw new pdoDbException($e);
        }
    
    }
    

    【讨论】:

    • @rootatwc 也是正确的 - 但如果您的参数未设置(这将为您指明正确的方向),您可能会遇到异常(如果您检查 PDOException)。
    猜你喜欢
    • 2013-05-19
    • 2014-12-14
    • 2012-05-05
    • 2014-08-12
    • 1970-01-01
    • 2016-03-02
    • 2017-09-05
    • 1970-01-01
    • 2012-12-16
    相关资源
    最近更新 更多