我稍微修改了我在stackoverflow上找到的Select Exists函數,但無論我嘗試什麼,我的下面的函數總是返回$sqlResult
為true
。即使我在資料庫中只保留了兩個條目。
Select exists還有效嗎?
stackoverflow系統建議的所有答案都沒有回答我的問題,而是建議使用檢查返回行數的方法,而不是使用exists。 (或者他們給出的連結並沒有真正解釋exists結果代表什麼。)
function uniquedoesexist($dbHandle,$tablename,$fieldname,$value) { $sql = 'SELECT EXISTS(SELECT * FROM `' . $tablename . '` WHERE `'.$fieldname.'` = ? LIMIT 1 )'; $stmt = mysqli_prepare($dbHandle, $sql); mysqli_stmt_bind_param($stmt, 's',$value); $sqlResult = mysqli_stmt_execute($stmt); echo '$sqlResult: ' . $sqlResult.$br; return $sqlResult; }
使用:username Index varchar(255) utf8_german2_ci
對於我這個初學者的問題,我感到抱歉。 字段名的條目被設定為唯一。
P粉4019012662024-03-29 09:21:29
你需要以以下方式取得查詢結果:
function uniquedoesexist($dbHandle, $tablename, $fieldname, $value) { $sql = 'SELECT EXISTS(SELECT * FROM `'.$tablename.'` WHERE `'.$fieldname.'` = ? LIMIT 1)'; $stmt = mysqli_prepare($dbHandle, $sql); mysqli_stmt_bind_param($stmt, 's',$value); mysqli_stmt_execute($stmt); mysqli_stmt_bind_result($stmt, $data); mysqli_stmt_fetch($stmt); echo "SqlResult for $value: " . $data . PHP_EOL; return $data; }
另一種方式是取得傳回行數而不是使用SELECT EXISTS
:
<?php function uniquedoesexist($dbHandle, $tablename, $fieldname, $value) { $sql = 'SELECT * FROM `'.$tablename.'` WHERE `'.$fieldname.'` = ? LIMIT 1;'; $stmt = mysqli_prepare($dbHandle, $sql); mysqli_stmt_bind_param($stmt, 's',$value); mysqli_stmt_execute($stmt); mysqli_stmt_store_result($stmt); $found = mysqli_stmt_num_rows($stmt); echo "SqlResult for $value: " . $found . PHP_EOL; return $found; }#