<?php //polaczenie z baza etc. $sql = 'SELECT * FROM user WHERE user_name = ?'; $value = 'admin'; $stmt = $mysqli->prepare( $sql ); $stmt->bind_param( 'i' , $value ); $stmt->execute(); ?>
Sprawdziłem to dogłębnie i jeżeli bind_param 'oczekuje' wartości typu int a podamy mu string to wynikiem będzie wartość 0 (tak jak w rzutowaniu). Ale niestety zapytanie zostanie wykonane z tą wartością czyli dla kodu powyżej poleci
<?php $sql = 'SELECT * FROM user WHERE user_name = 0'; ?>
czyli wypisze wszystkie rekordy z tabeli user, tu jest to bardziej błąd programisty bo w bind_param powinno być 's', ale gdyby kod wyglądał tak
<?php $sql = 'SELECT * FROM user WHERE id = ?'; $value = 'admin'; $stmt = $mysqli->prepare( $sql ); $stmt->bind_param( 'i' , $value ); $stmt->execute(); ?>
otrzymamy wszystkie dane usera o id = 0, pytanie czy jest to bug? zapytanie nie powinno się wykonać, tak jak jest w przypadku podania 's' w bind_param oraz wartości int. Wynikiem będzie również 0 ale nie dostaniemy żadnych wyników.
Czy ktoś może to potwierdzić?