Jaki jest (mam nadzieję, że jest) zamiennik** mysqli_real_escape_string()** w sqlite? Taki który działa z PDO
http://php.net/manual/en/mysqli.real-escape-string.php
Mówi:
Note unlike PDO string escape, MySQLi does not include apostrophes.
So, you probably want something like this:
function escape($s){ $s = $this->mysqli->real_escape_string($s); return "'$s'"; }
Pewnie sqlite_escape_string
@Marcin.Miga: a jak to zastosować podobnie do tego
query(sprintf("SELECT %s FROM %s", mysqli_real_escape string($polaczenie, $zmienna1,mysqli_real_escape string($polaczenie, $zmienna2))) tylko w sqlite?
tak samo tylko zamiast mysqlirealescape... wpisać $db->escape($value1), $db->escape($value2) ?
Użyj zmiennych pomocniczych. Kod ładniejszy, łatwiej się debuguje...
$zmienna1=sqlite_escape_string($zmienna1);
$zmienna2=sqlite_escape_string($zmienna2);
$sql=sprintf("SELECT %s FROM %s", $zmienna1, $zmienna2);
$return = sqlite_query($sql);
@Marcin.Miga: Uncaught Error: Call to undefined function sqlite_escape_string() :-(
php_info()
Po prostu pobinduj parametry w PDO:
http://php.net/manual/en/pdostatement.bindparam.php
http://php.net/manual/en/pdostatement.bindvalue.php
@Marcin.Miga: chyba phpinfo(); zaraz wyśle, ale czy to nie ejst tak, że jak używam pdo to te ssqlite_funkcje nie działają?
@mefsh: co? To miało być zabezpieczenie przed sql injection wcześniej jest htmlentities(), ale wg. kursu warto dodać też sprintf.
@CodeRZ: Bindowanie parametrów jest zabezpieczeniem przeciwko sql injection.
Zrobiłem, czy jest bezpiecznie?
$login = htmlentities($login, ENT_QUOTES, "UTF-8");
$password = htmlentities($password, ENT_QUOTES, "UTF-8");
$sql2 = 'SELECT * FROM Users WHERE Name= :login AND Password= :password';
$stmt = $db->prepare($sql2);
$stmt->bindParam('login', $login);
$stmt->bindParam('password', $password);
$stmt->execute();