Salve,
ho da poco iniziato a studiare php e su un libro ho trovato lo script della seguente classe:
Codice PHP:
<?php
class DBManager
{
private static $s_conn;
public static function getConnection()
{
if (DBManager::$s_conn === NULL)
{
$conn = @new mysqli(DB_HOST, DB_USER, DB_PASS, DB_DBASE);
if (mysqli_connect_errno() !== 0)
{
$msg = mysqli_connect_error();
throw new DatabaseErrorException($msg);
}
@$conn->query('SET NAMES \'utf8\'');
DBManager::$s_conn = $conn;
}
return DBManager::$s_conn;
}
public function mega_escape_string
(
$in_string,
$in_markup = FALSE
)
{
if ($in_string === NULL)
return '';
$str = ereg_replace('([\'%;])', '\\\1', $in_string);
if ($in_markup == TRUE)
{
$str = htmlspecialchars($str, ENT_NOQUOTES,
"UTF-8");
}
return $str;
}
}
?>
In ul altro script il metodo public function mega_escape string viene richiamato in questo modo:
Codice PHP:
public function userNameExists($in_uname)
{
if ($in_uname === NULL or trim($in_uname) == '')
throw new MyInvalidArgumentException('$in_uname');
$conn = DBManager::getConnection();
$uname = DBManager::mega_escape_string($in_uname);
$query = <<<EOQUERY
SELECT username, user_id FROM Users
WHERE username = '$uname'
EOQUERY;
$results = @$conn->query($query);
if ($results === FALSE or $results === NULL)
throw new DatabaseErrorException($conn->error);
if ($results->num_rows == 0)
{
$results->close();
return -1;
}
else if ($results->num_rows == 1)
{
$row = @$results->fetch_assoc();
$results->close();
return $row['user_id'];
}
else
{
$results->close();
throw new InternalErrorException('Multiple users with same name');
}
}
Ma quando richiamo il metodo mega_escape_string mi da un errore per il fatto che lo sto facendo come fosse un metodo statico.
Come si richiama un metodo pubblico dall'esterno? Se uso -> Netbeans mi dice che sto facendo un errore.
Grazie