2015-06-09 4 views
0

Я использую этот метод, чтобы вставить данные в моей базе данных:print_r PHP PDO вставки заявление

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. Как может I print_r() весь оператор sql?

    print_r ($ query-> execute());

отображать ли (1,1,1,1)

и я хочу что-то вроде: (Menue, (р) Salat (ш) Gemüse унд Teigwaren (/ р), 2015-09 -06, 2)

Я не уверен, что он не попадает в базу данных или проблема с базой данных. Сам db может обрабатывать умлаут и записывается в utf-8. Я сбросил файл и внимательно посмотрел на него, он не должен быть поврежден.

+1

Вы можете напечатать '$ date' и' $ session', прежде чем он попадает в SQL block - но посмотрите на документацию для PHP PDO- http://php.net/manual/en/pdostatement.bindvalue.php - попробуйте указать тип, который вы хотите вставить (например, '$ query-> bindValue (1, «menue», PDO :: PARAM_STR); ' – doublesidedstickytape

+2

Если вы используете истинные подготовленные операторы прямо к базе данных, нет« цельного заявления ». У вас есть запрос с заполнителем s, и у вас есть свои ценности. Проблема почти наверняка связана с проблемой кодирования, вы фактически не отправляете кодированные данные UTF-8 в базу данных. – deceze

ответ

3

Вы не можете увидеть полный запрос, потому что он не существует на стороне PHP.

PHP сначала отправляет запрос, а затем параметры при использовании подготовленных операторов (Не уверен, что происходит, когда включен режим эмуляции).

Если вы хотите увидеть окончательный запрос, вы должны включить журнал запросов вашей базы данных и проверить его.

Это ближайший вы можете получить с помощью только PHP: http://us2.php.net/manual/en/pdostatement.debugdumpparams.php

1

Try это ...

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); 
    } 

} 
+0

@rootatwc также прав - но вы можете получить исключение (если вы проверите PDOException), если ваши параметры не установлены (что укажет вам в правильном направлении). – doublesidedstickytape

Смежные вопросы