URL GET 매개 변수에 기반한 MySQL 데이터베이스에서 행을 가져 오는 간단한 PHP 스크립트가 있는데, ID라고하는 int입니다.mysqli_stmt_fetch가 실패했을 때 기본 행을 검색하는 방법은 무엇입니까?
DB에 행이 아닌 int를 입력하거나 GET 매개 변수가 데이터베이스에 대해 유효하지 않은 ID가되거나 문자 또는 무언가를 입력하려고하면 기본값을 표시하고 싶습니다. 기록.
다음 코드는 실제로 작동하지만 잘못된 코드라고 생각합니다. 왜, 또는 내가 뭘해야하는지 잘 모르겠습니다. 데이터베이스 쿼리를 실행하기 전에 ID가 int인지 확인해야하지만 유효하지 않은 ID가 사용되면 해결할 수 없습니다.
이렇게 적절한 질문을하기 위해, mysqli_stmt_fetch가 false를 반환하면 어떻게 복구해야합니까?
쉽게 이동 내가 PHP의 int로 ID 캐스팅이에 SQL 쿼리를 변경 한 일부 의견과 실험에, 그래서 나는, 나는 덩어리 :-)
$ID = (int)$_GET["id"];
$query = "SELECT `col1`, `col2`, `col3` FROM `table` WHERE `ID` = ?";
if ($stmt = mysqli_prepare($connection, $query))
{
mysqli_stmt_bind_param($stmt, "i", $ID);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $var1, $var2, $var3);
if (!mysqli_stmt_fetch($stmt))
{
$ID = 1; //A record I know exists and will always exist
mysqli_stmt_bind_param($stmt, "i", $ID);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $var1, $var2, $var3);
mysqli_stmt_fetch($stmt);
}
mysqli_stmt_close($stmt);
}
확인 해요 알고 :
SELECT `col1`, `col2`, `col3`
FROM `table`
WHERE `ID` = ?
UNION
SELECT `col1`, `col2`, `col3`
FROM `table`
WHERE `ID` = 1
LIMIT 1
이 방법은 내가 생각할 수있는 모든 경우에 적용되며 안전합니다. 어떤 문제? 내가 가진 것보다 낫지?
나는 이것의 변형을 위해 끝났다. PHP에서 ID를 int로 캐스팅한다는 것은 ID 문자열이 ID가 아닌 문자열로 시작되는 경우 항상 ID가 0으로 끝나거나 문자열을 시작한 int로 끝나는 것을 의미합니다. – Biggles