dreasMedlem sedan jan. 2004146 inlägg
Hej hallå alla!
Får inte detta exemplet av quote_smart att fungera;
http://se2.php.net/manual/sv/function.mysql-real-escape-string.php#78893
Det som dyker upp är;
mysql_real_escape_string() [function.mysql-real-escape-string]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
Det gäller denna rad;
$value = "'" . (((isset($conn)) && (is_resource($conn))) ? (mysql_real_escape_string($value, $conn)) : (mysql_real_escape_string($value))) . "'";
Ovanstående felmeddelande ska man ju få om det är fel på kopplingen till databasen. Jag misstänker att jag får det för att jag kallar funktionen på fel sätt. Just nu ser det ut så här:
$quote = new QuoteSecure();
$quote->quote_smart($email)
Dvs jag skickar inte med någon databaskoppling, likt ->quote_smart($email,$pdh) (där $pdh innehåller min PDO koppling), vilket jag även provat utan resultat. Men i och med att $conn sätts till null i funktionen, borde väl denna inte vara med?
Vidare undrar jag över kodsättet som författaren av funktionsexemplet använder sig av. Har inte stött på det tidigare, jag tänker alltså på användandet av ? tecken, ex:
$value = ($nullify) ? ("NULL") : ("''");
Vad gäller i denna rad? Vad ska jag söka på för att läsa mer om detta sätt att skriva?
Tack på förhand!
Hälsningar
Andreas
dreasMedlem sedan jan. 2004146 inlägg
Tar och inkluderar koden här, för de som inte orkar klicka på länken :)
function quote_smart($value = "", $nullify = false, $conn = null) {
//reset default if second parameter is skipped
$nullify = ($nullify === null) ? (false) : ($nullify);
//undo slashes for poorly configured servers
$value = (get_magic_quotes_gpc()) ? (stripslashes($value)) : ($value);
//check for null/unset/empty strings (takes advantage of short-circuit evals to avoid a warning)
if ((!isset($value)) || (is_null($value)) || ($value === "")) {
$value = ($nullify) ? ("NULL") : ("''");
}
else {
if (is_string($value)) {
//value is a string and should be quoted; determine best method based on available extensions
if (function_exists('mysql_real_escape_string')) {
$value = "'" . (((isset($conn)) && (is_resource($conn))) ? (mysql_real_escape_string($value, $conn)) : (mysql_real_escape_string($value))) . "'";
}
else {
$value = "'" . mysql_escape_string($value) . "'";
}
}
else {
//value is not a string; if not numeric, bail with error
$value = (is_numeric($value)) ? ($value) : ("'ERROR: unhandled datatype in quote_smart'");
}
}
return $value;
}
SPiNMedlem sedan mars 20005 832 inlägg
Hej igen! :)
När du använder PDO har du möjligheten att använda prepared statements, vilka ger automatiskt skydd mot SQL-injektioner. Med andra ord behöver du inte använda dig av mysql_real_escape_string() eller mysql_escape_string().
<?php
$pdh = new PDO("mysql:host=localhost;dbname=dreas", "dreas", "greken");
$stmt = $pdh->prepare("SELECT namn FROM användare WHERE email=:useremail");
$stmt->bindParam(":useremail", $email);
$stmt->execute();
...
Så du oroar dig i onödan!
Anledningen till att funktionen inte fungerar för dig är dock för att du inte har någon mysql_*-koppling, du använder ju som du säger PDO.
Angående:
$value = ($nullify) ? ("NULL") : ("''");
Det är en enkel if-sats. Om '$nullify' är sann, returnera "NULL" - annars returnera "''".
Den gör precis samma sak som:
if($nullify) {
$value = "NULL";
} else {
$value = "''";
}
Hoppas det blev klarare! :)
/b
dreasMedlem sedan jan. 2004146 inlägg
:i
Du är toppen björn! (y)
Strålande, då har jag fått lugn på mina injection nerver.. schyst med PDO alltså! nice nice!
Tack ska du ha! Och se upp för Olympiacos ikväll!!! :D