Ich bin eine Verbindung zu einer MySQL-Datenbank mit PHP, und am Anfang habe ich die mysql_ Methoden. Ich habe dann herausgefunden, dass diese Methoden veraltet sind, also bin ich zu PDO gewechselt und bin gerade dabei meinen Code zu ändern (und ich habe keine Erfahrung mit PHP PDO). Jetzt bekomme ich einen Fehler und ich (und auch mein Kollege) kann nicht herausfinden, warum ich es bekomme, und der Code ist sehr einfach, also bin ich mir nicht sicher ..500 Interner Server Fehler mit PDO Verbindung zu MySQL
Ich habe ein Skript, das Verbindungsvariablen konfiguriert dies wie:
<?php
define('DB_USER', "user"); // db user
define('DB_PASSWORD', "password"); // db password
define('DB_DATABASE', "myDB"); // database name
define('DB_SERVER', "localhost"); // db server
?>
Dann in die Datenbank eine Klasse definiert für die Verbindung ich habe:
<?php
/**
* A class file to connect to database
*/
class DB_CONNECT {
private $con;
// constructor
function __construct() {
// connecting to database
$this->connect();
}
// destructor
function __destruct() {
// closing db connection
$this->con = null;
}
/**
* Function to connect with database
*/
function connect() {
try {
// import database connection variables
require_once __DIR__ . '/db_config.php';
$this->con = new PDO("mysql:host=".DB_SERVER.";dbname=".DB_DATABASE.";charset=utf8mb4", DB_USER, DB_PASSWORD);
$this->con -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $con;
} catch (PDOException $ex) {
die("Error connecting to DB: ".$ex->getMessage());
}
}
}
?>
Jetzt renne ich dieses nächste Skript, das alle Elemente aus einer Tabelle in meiner Datenbank holt:
<?php
// array for JSON response
$response = array();
// include db connect class
require_once __DIR__ . '/db_connect.php';
// connecting to db
$db = new DB_CONNECT();
// get all products from products table
//$result = mysql_query("SELECT * FROM ITEM") or die(mysql_error());
$query = "SELECT * FROM ITEM";
$stmt = $db->prepare($query); //eror here!
$stmt -> execute();
//foreach($db->query("SELECT * FROM ITEM") as $row) {
// $response["products"] = array();
//}
// check for empty result
if ($stmt->fetchColumn() > 0) {
// looping through all results
// products node
$response["products"] = array();
while ($row =$stmt->fetch(PDO::FETCH_ASSOC)) {
// temp user array
$product = array();
$product["name"] = $row["name"];
$product["am"] = $row["am"];
// push single product into final response array
array_push($response["products"], $product);
}
// success
$response["success"] = 1;
// echoing JSON response
echo json_encode($response);
} else {
// no products found
$response["success"] = 0;
$response["message"] = "No products found";
// echo no users JSON
echo json_encode($response);
}
?>
Grundregel: Wenn Sie einen 500 Fehler von einer Website erhalten, wird Ihr ERSTER Halt auf dem Debugging-Zug sein, um das Fehlerprotokoll des Webservers anzusehen. Bis Sie Details über den Fehler erhalten, dreht sich alles, was Sie tun, nur im Dunkeln, GUESS bei dem Problem. –
Beachten Sie, dass Sie 'return $ con;' nicht 'return $ this-> con;' – Rasclatt
zurückliefern. Kann ich Ihnen eine Antwort mit meiner Klassenstruktur von php PDO empfehlen, die ich in meinen Anwendungen verwende? –