[fast gelöst]sql Abfrage: Access denied
![](http://www.drupalcenter.de/files/noavatar_mini.gif)
am 30.03.2011 - 16:36 Uhr in
Folgender code erzeugt Access denied for user 'web1'@'localhost' (using password: No) wenn er als Block eingefügt wird. Aber warum klappt die Datenbankabfrage nicht wie immer drupalintern?
$sql = "SELECT * FROM `quiz_node_results_answers` WHERE `result_id` = $resultid ORDER BY `quiz_node_results_answers`.`number` ASC ";
$db_result = db_query(db_rewrite_sql($sql));
$ergebnis = mysql_query($db_result)
OR die("Error: $db_result <br>".mysql_error());
Access denied for user 'web1'@'localhost' (using password: No)
- Anmelden oder Registrieren um Kommentare zu schreiben
Keine Ahnung, ob das was mit
am 30.03.2011 - 17:28 Uhr
Keine Ahnung, ob das was mit dem Fehler zu tun hat, aber warum verwendest du denn sowas:
$ergebnis = mysql_query($db_result)
? Wieso verwendest du dafür nicht die Drupal-Funktionen, z. B. db_fetch_object?Außerdem verwendest du den Database-Layer von Drupal falsch, Variablen wie
$resultid
haben im SQL-Code nichts zu suchen, da gehören Platzhalter hin, die anschließend ersetzt werden, so hier:<?php
//Falsch!
$sql = "SELECT * FROM `quiz_node_results_answers` WHERE `result_id` = $resultid ORDER BY `quiz_node_results_answers`.`number` ASC ";
$db_result = db_query(db_rewrite_sql($sql));
$ergebnis = mysql_query($db_result)
OR die("Error: $db_result <br>".mysql_error());
//Richtig!
$sql = "SELECT * FROM `quiz_node_results_answers` WHERE `result_id` = %d ORDER BY `quiz_node_results_answers`.`number` ASC ";
$db_result = db_query(db_rewrite_sql($sql), $resultid);
$ergebnis = db_fetch_object($db_result);
?>
Funktioniert denn der Code ansonsten richtig und wird nur im Block nicht korrekt ausgeführt?
Exterior
am 31.03.2011 - 18:26 Uhr
...
Funktioniert denn der Code ansonsten richtig und wird nur im Block nicht korrekt ausgeführt?
Ja, es gibt auch Abfrageergebnisse aus der db, nur die merkwürdige Fehlermeldung stört.
Danke für Deinen Verbesserungsvorschlag. Ändert leider nix an der Fehlermeldung.
tomx schrieb Exterior
am 31.03.2011 - 18:36 Uhr
...
Funktioniert denn der Code ansonsten richtig und wird nur im Block nicht korrekt ausgeführt?
Ja, es gibt auch Abfrageergebnisse aus der db, nur die merkwürdige Fehlermeldung stört.
Danke für Deinen Verbesserungsvorschlag. Ändert leider nix an der Fehlermeldung.
Hast du dir testweise in dem Block schon mal andere Daten auslesen lassen ? bspw. ein "SELECT * FROM node".. ? Wäre ja interessant zu wissen, ob diese Query funktioniert..
Gibt es denn sonst Probleme in deiner Drupal Installation bzw. arbeitet diese fehlerfrei ?
SteffenR
<?php $ergebnis =
am 31.03.2011 - 18:38 Uhr
<?php
$ergebnis = mysql_query($db_result)
?>
Die Zeile macht doch keinen Sinn oder? Du schickst den query doch eine Zeile vorher...
Cyberschorsch schrieb<?php
am 31.03.2011 - 18:54 Uhr
$ergebnis = mysql_query($db_result)
Die Zeile macht doch keinen Sinn oder? Du schickst den query doch eine Zeile vorher...
Exterior hatte da doch schon den richtigen Code gepostet - der sollte so auch funktionieren:
<?php
$sql = "SELECT * FROM `node`";
$db_result = db_query($sql);
$ergebnis = db_fetch_object($db_result);
?>
SteffenR@drupal.org
am 31.03.2011 - 22:40 Uhr
Hast du dir testweise in dem Block schon mal andere Daten auslesen lassen ? bspw. ein "SELECT * FROM node".. ? Wäre ja interessant zu wissen, ob diese Query funktioniert..
Gibt es denn sonst Probleme in deiner Drupal Installation bzw. arbeitet diese fehlerfrei ?
SteffenR
Ja, sonst läuft drupal. Auch andere Abfragen geben ein "Access denied " aus.
Wie sieht denn eine saubere drupal sql Abfrage aus? Ich denke das macht Drupal's database abstraction layer?
Versuchst du, vorher noch mit
am 31.03.2011 - 22:40 Uhr
Versuchst du, vorher noch mit PHP-Funktionen eine Verbindung zur Datenbank aufzubauen? Weil das Passwort von Drupal ja eigentlich beim Verbindungsaufbau verwendet wird...
Exterior schrieb Versuchst
am 01.04.2011 - 12:23 Uhr
Versuchst du, vorher noch mit PHP-Funktionen eine Verbindung zur Datenbank aufzubauen? Weil das Passwort von Drupal ja eigentlich beim Verbindungsaufbau verwendet wird...
Nein, sollte ja der layer machen...
Hat jemand noch eine Idee?
Der Fehler taucht bei jedem
am 01.04.2011 - 13:36 Uhr
Der Fehler taucht bei jedem Datenbankverbindungsversuch auf, egal auf welche Tabelle zugegriffen werden soll:
Nur dieser code produziert den Fehler Access denied for user web1
<?php
$sql = "SELECT * FROM `url_alias` WHERE `pid` = 365";
$db_result = db_query(db_rewrite_sql($sql),$resultid);
$ergebnis = mysql_query($db_result);
?>
Was kann das sein?
Also mal
am 01.04.2011 - 13:38 Uhr
Also mal wirklich....
<?php
$ergebnis = mysql_query($db_result);
?>
DAS ist falsch! Exterior hats schon richtig gepostet.
Das Problem war eine Access
am 01.04.2011 - 14:08 Uhr
Das Problem war eine Access Fehler, welcher dadurch verursacht wurde, dass in der settings.php anstatt
<?php
$db_url = 'mysql://xxx:xxx@localhost/xxx';
?>
<?php
$db_url = 'mysqli://xxx:xxx@localhost/xxx
?>
Das i für mysqli war der Übertäter.
Aber warum klappt das eigentlich nicht auch mit mysqli? Kann mir das mal einer erklären?