Webprofis is een Forum waarin je vragen kunt stellen die webgerelateerd zijn. Heb je vragen over of problemen met je Webpagina, HTML, CSS, Javascript, PHP of andere client of serverside scriptingtalen? Stel ze dan gerust op dit forum. Op dit forum zijn een aantal vrijwilligers actief die u graag met uw vragen willen helpen en u waar mogelijk een passend antwoord aanbieden. Hebt u zelf veel ervaring en kennis met betrekking tot het bovenstaande? U bent van harte welkom om uw kennis met anderen te delen!

We hopen dat eenieder op dit Forum een leerzame ervaring mag opdoen.

Team Webprofis

alternatief mysql_escape_string

bewerkt ma 24 nov 2014 in PHP, MySQL Posts: 732
Wie wil even meedenken?

Ik roep mijn data als volgt aan:


$data = Template::templateGetList( 'single', '_pages', 'page', 'nieuws', '_subpage', 'artikel', $numRows=10, $order='title ASC' );

De functie:


public static function templateGetList( $display, $table, $column1, $value1, $column2, $value2, $numRows=1000000, $order="publication DESC" ) {
$conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
$sql = "SELECT SQL_CALC_FOUND_ROWS *, UNIX_TIMESTAMP(publication) AS publication FROM " . $table . "
WHERE " . $column1 . " = '" . $value1 . "' AND " . $column2 . " = '" . $value2 . "'
ORDER BY " . mysql_escape_string($order) . " LIMIT :numRows";
$st = $conn->prepare( $sql );
$st->bindValue( ":numRows", $numRows, PDO::PARAM_INT );
$st->execute();
$list = array();
while ( $row = $st->fetch() ) {
$article = new RvdTemplate( $row );
$list[] = $article;
}
$sql = "SELECT FOUND_ROWS() AS totalRows";
$totalRows = $conn->query( $sql )->fetch();
$conn = null;
return ( array ( "results" => $list, "totalRows" => $totalRows[0] ) );
}

Nu wil ik mysql_escape_string vervangen, omdat dit straks niet meer wordt ondersteund.

mysql_real_escape_string($order) geeft een error.

Of beter de functie str_replace of addslashes ?


If it's not fun, you're not doing it right!

Reacties

  • afaik hoeft dat niet bij prepared statements?
  • PMPosts: 732
    Bij page, subpage "zeg maar het path" doe ik dit wel, maar bij de titel niet.

    Normaal is het geen probleem zodra $oder publication (datum) is, dan wordt het gewoon ORDER BY " . $order . " aangezien datum als 2014-11-03 wordt opgeslagen.

    Maar zodra men op titel wilt rangschikken mag die $order geen gekke tekens bevatten.
    If it's not fun, you're not doing it right!
  • oh, je wilt het dus niet voor de veiligheid? Dan is addslashes al voldoende (addslashes is niet veilig -> iets met last significant bit oid)
    maar of die slashes je order (op titel) goed zullen doen?
    Test het even :D
  • PMPosts: 732
    Je hebt mij even aan het denken gezet,
    als ik de page en subpage path wel veilig weg schrijf waarom dat niet de titel ?

    Voor path gebruik ik een functie, soort van clean url, dit gaan we nu dan ook maar voor de titel doen.
    Scheelt alweer werk bij het uitlezen.

    Thanks, proost.
    If it's not fun, you're not doing it right!
  • bewerkt ma 24 nov 2014
    PMPosts: 415
    Maar volgens mij doe je je query gewoon veilig hoor: prepared
    oh, ook proost :D
  • PMPosts: 732
    Ik heb hier in verleden al eens mee zitten stoeien, en heb toen de titel niet zo weg geschreven omdat er ook titels waren met umlaut.
    Vond dat toen te veel werk hihihih....
    If it's not fun, you're not doing it right!
Login of Registreer om te reageren.