Es gibt ein kleines PDO-Problem, an dem ich seit einiger Zeit arbeite. Da ich nicht weiß, was hier falsch ist, habe ich darüber nachgedacht, es auf diese Liste zu bringen. Vielleicht wissen einige von Ihnen mehr ...php/pdo/msql - Zugriff verweigert
Ich habe eine Website mit einem Login, der einen Benutzer und ein Passwort für eine MySQL-basierte Datenbank überprüft. Wenn die PDO-Verbindung in der gleichen Datei hergestellt wird, funktioniert alles einwandfrei, man kann sich ohne Probleme einloggen. So wie es funktionieren soll ...
Wenn jedoch den Datenbankverbindungsteil an eine separate Funktion zu bewegen, die ich aus einer anderen Datei enthalten, nicht gU auf mich und gibt mir:
SQLSTATE[28000] [1045] Access denied for user '...'@'...' (using password: NO) Fatal error: Call to a member function prepare() on a non-object in /.../.../... on line 41
aus Gründen der Klarheit, hier ist der Code:
Version 1:
Dies funktioniert:
Hierist Version 2
Dies funktioniert nicht:
<?php
require "./vars_and_functions.php";
/* open database connection */
$pdo = database_connection();
/* query */
$query = "SELECT uname, passw FROM members WHERE uname = ? AND passw = ?";
$q = $pdo->prepare($query);
$q->execute(array($u_name, $p_word_md5));
$result = $q->rowCount();
if($result == 1) { /* we have a match */
/* close the database connection */
$pdo = null;
/* and redirect */
header("...");
} /* if */
else { /* wrong credentials */
/* close the database connection */
$pdo = null;
/* and go back to the login page */
header("...");
} /* else */
} /* try */
catch(PDOException $e) {
echo $e->getMessage();
} /* catch */
?>
Mein Include vars_and_functions.php wie folgt aussieht:
$db_host = "...";
$db_name = "...";
$db_user = "...";
$db_pass = "...";
function database_connection() {
try {
$pdo = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass);
}
catch(PDOException $e) {
echo $e->getMessage();
}
return $pdo;
}
Der einzige wirkliche Unterschied meiner Meinung nach ist dass hier die PDO-Verbindung über einen Funktionsaufruf hergestellt wird, während sich die Funktion in der Include-Datei vars_and_functions.php befindet.
Was ist hier falsch?
Aktivieren Sie 'error_reporting', das Ihnen mitteilt, dass die Variablen im Bereich der lokalen Variablen der Funktionen nicht verfügbar sind. – mario
ok Leute, mir ist klar, dass die Darstellung des Codes hier etwas unordentlich aussieht. Ich arbeite daran, dies zu korrigieren ... – user1803765