2016-04-04 4 views
-3

Ich habe einfach nur versucht, UTF8-Daten in die Datenbank einzufügen und abzurufen, aber es gibt etwas wirklich herumalbern! Es zeigt nur einen Fehler.PDO-Member-Funktion auf Boolean

Hier ist meine table structure und ich denke, es ist nichts falsch.

Fatal error: Call to a member function fetchAll() on boolean

Hier sind die Quellcodes. Ich habe nach diesem Problem gesucht, aber in dieser Situation funktionieren sie nicht. Bitte markieren Sie dies nicht als Duplikat, weil ich alles ausprobiert habe und nicht funktioniert, deshalb habe ich gepostet. Danke im Voraus.

<?php 

error_reporting(E_ALL); 
ini_set('display_errors', true); 

header('Content-Type: text/html; charset=utf-8'); 

$pdo = new PDO('mysql:dbname=ourcms;host=localhost', 'root', '', 
       array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')); 

if (!empty($_POST['text'])) { 
    $stmt = $pdo->prepare('INSERT INTO `texts` (`text`) VALUES (:text)'); 
    $stmt->execute(array('text' => $_POST['text'])); 
} 

$results = $pdo->query('SELECT * FROM `texts`')->fetchAll(PDO::FETCH_ASSOC); 

?> 
<!DOCTYPE html> 

<html> 
<head> 
    <title>UTF-8 encoding test</title> 
</head> 
<body> 

<h1>Display test</h1> 

<p> 
A good day, World!<br> 
Schönen Tag, Welt!<br> 
Une bonne journée, tout le monde!<br> 
يوم جيد، العالم<br> 
좋은 일, 세계!<br> 
Một ngày tốt lành, thế giới!<br> 
こんにちは、世界!<br> 
</p> 

<h1>Submission test</h1> 

<form action="" method="post" accept-charset="utf-8"> 
    <textarea name="text"></textarea> 
    <input type="submit" value="Submit"> 
</form> 

<?php if (!empty($_POST['text'])) : ?> 
    <h2>Last received data</h2> 
    <pre><?php echo htmlspecialchars($_POST['text'], ENT_NOQUOTES, 'UTF-8'); ?></pre> 
<?php endif; ?> 

<h1>Output test</h1> 

<ul> 
    <?php foreach ($results as $result) : ?> 
     <li> 
      <pre><?php echo htmlspecialchars($result['text'], ENT_NOQUOTES, 'UTF-8'); ?></pre> 
     </li> 
    <?php endforeach; ?> 
</ul> 

</body> 
</html> 
+0

Ihre Tabelle ist 'Tests' nicht' Texte'? Und du versuchst, in "Texte" mit der Spalte "Text" statt "Test" einzufügen? – Jon

+0

o.O! Danke Profis! Wo ich gesucht habe, weiß ich nicht! Ich bin diesen Posts gefolgt, aber da habe ich nichts gesehen! [So ist die Tatsache hier] (http://stackoverflow.com/questions/35412343/php-error-call-to-a-member-function-fetchall-on-boolean) –

Antwort

0

hauptsächlich diese Situation wurde maximal für Tippfehler erstellt! Also bevor Sie irgendeinen Beitrag zu diesem Problem machen. Überprüfen Sie Ihre Datenbank Tippfehler und Konfiguration.

1

$results = $pdo->query('SELECT * FROM texts ')->fetchAll(PDO::FETCH_ASSOC);

die Kette entfernen und das Ergebnis query() überprüfen, weil aus irgendwelchen Gründen es false statt PDOStatement zurück:

Return Values 
PDO::query() returns a PDOStatement object, or FALSE on failure. 

https://secure.php.net/manual/en/pdo.query.php

Generell sollte man nie davon ausgehen, Abfrage erfolgreich, also immer auf Fehler prüfen, bevor Sie fortfahren.