suntrop
Erfahrenes Mitglied
Hi. Ich nutze für einen Login die phpUserClass und dabei treffe ich gerade auf eine schwierige Situation. In der Klasse gibt es ein Methode die anhand eines Arrays Tabellenfelder aktualisiert.
Die Methode sieht so aus:
Was mich jetzt aushebelt ist, dass ich im aktuellen Fall keine Strings, sondern nur MySQL-Kommandos in das Array eintragen kann. Ein Datum 2009-11-29 19:35:07 führt zur Fehlermeldung:
Das liegt an der escape() Methode:
Wenn ich in updateProperty() das Query ändere
(einfach Anführungsstriche für $v eingefügt)
… dann brauche ich den String im $updateArray nicht mehr mit Anführungsstrichen als String markieren. Dann kann ich allerdings keine MySQL-Kommandos mehr senden. Ein klassisches Dilemma
Ich befürchte, dass die Art und Weise leider nur das eine oder andere (Strings oder SQL) zulässt und ich somit das ganze umschreiben muss. Vielleicht (die Hoffnung haben ich noch ) geht es aber auch einfacher und ich komm nur nicht drauf.
Was habt ihr für einen Rat für mich? Wie kann ich das am besten lösen?
Danke erstmal dafür, dass du bis hierher gelesen hast Sorry für das lange Posting.
PHP:
$updateArray = array(
'lastVisit' => "'2009-11-29 18:35:43'",
'loginCount' => 'loginCount+1',
'lastLogin' => 'NOW()'
);
$user->updateProperty($updateArray);
Die Methode sieht so aus:
PHP:
public function updateProperty($properties)
{
if(is_array($properties) && count($properties) > 0)
{
$i=1;
$query = "UPDATE ".$this->dbTable." SET ";
foreach($properties AS $k => $v)
{
$query .= "".$this->escape($k)." = ".$this->escape($v)."".(($i++ < count($properties)) ? ', ' : ' ');
#$query .= '`'.$this->escape($k)."` = '".$this->escape($v)."'".(($i++ < count($properties)) ? ', ' : ' ');
}
$query .= "WHERE ".$this->tbFields['userID']." = ".$this->userID."";
if($this->mysqli->query($query))
return true;
else
{
$this->error($this->mysqli->error, __LINE__);
return false;
}
}
else
return false;
}
Was mich jetzt aushebelt ist, dass ich im aktuellen Fall keine Strings, sondern nur MySQL-Kommandos in das Array eintragen kann. Ein Datum 2009-11-29 19:35:07 führt zur Fehlermeldung:
Code:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'2009-11-29 19:35:07\', loginCount = loginCount+1, lastLogin = NOW() WHERE id =' at line 1
Das liegt an der escape() Methode:
PHP:
private function escape($str)
{
$str = get_magic_quotes_gpc() ? stripslashes($str) : $str;
return $this->mysqli->real_escape_string($str);
return $str;
}
Wenn ich in updateProperty() das Query ändere
PHP:
$query .= '`'.$this->escape($k)."` = '".$this->escape($v)."'".(($i++ < count($properties)) ? ', ' : ' ');
… dann brauche ich den String im $updateArray nicht mehr mit Anführungsstrichen als String markieren. Dann kann ich allerdings keine MySQL-Kommandos mehr senden. Ein klassisches Dilemma
Ich befürchte, dass die Art und Weise leider nur das eine oder andere (Strings oder SQL) zulässt und ich somit das ganze umschreiben muss. Vielleicht (die Hoffnung haben ich noch ) geht es aber auch einfacher und ich komm nur nicht drauf.
Was habt ihr für einen Rat für mich? Wie kann ich das am besten lösen?
Danke erstmal dafür, dass du bis hierher gelesen hast Sorry für das lange Posting.