injection - php mysql_real_escape_string alternative




mysql_real_escape_string mit Zend (3)

Sie können die von Zend_Db bereitgestellte quote() -Funktion Zend_Db :

http://framework.zend.com/manual/en/zend.db.adapter.html#zend.db.adapter.quoting.quote

Ich entwickle eine Webanwendung mit Zend Framework. Für ausgewählte Aussagen habe ich folgenden Weg genommen.

Ex:

public function getData($name)
{
  $sql = "SELECT * from customer where Customer_Name = '$name'";
  return $this->objDB->getAdapter()->fetchAll ($sql);
}

Das funktioniert gut. Aber wenn ich Kundenname wie: colvin's place , scheitert die Abfrage. Und ich weiß, dass es wegen des einfachen Zitats ist.

Früher habe ich die PHP-Funktion von addslashes verwendet. Aber ich habe gesehen, dass das kein guter Weg ist. Diesmal habe ich die PHP-Funktion mysql_real_escape_string .

Das Problem ist die folgende Warnung.

Warning</b>: mysql_real_escape_string() [<a href='function.mysql-real-escape-string'>function.mysql-real-escape-string</a>]: Access denied for user 'ODBC'@'localhost' (using password: NO)

Dies liegt daran, dass die Funktion mysql_real_escape_string eine Verbindung zu der von mysql_connect geöffneten Datenbank mysql_connect . Meine Frage ist, wie kann ich das mit * Zend_DB * Klassen verwenden. Ich muss immer benutzerdefinierte Auswahlabfragen verwenden. Schätzen Sie Ihre anderen Vorschläge, wenn verfügbar.

Vielen Dank


Ich hatte das gleiche Problem und diese Lösung funktioniert gut für mich. Ich hoffe, das wird helfen. Sie können so etwas tun:

$quote_removed_name = str_replace("'","''",$name);

Schreibe dann deine Abfrage auf diese Weise:

$sql = "SELECT * from customer where Customer_Name = '$quote_removed_name'";

Sie können auch die Parameterbindung verwenden, dann sieht die Methode wie folgt aus:

public function getData($name)
{
  $sql = "SELECT * from customer where Customer_Name = :name";
  return $this->objDB->getAdapter()->fetchAll ($sql, ['name' => $name]);
}

Dann werden Ihre Daten automatisch maskiert







mysql-real-escape-string