2014-01-15 6 views
0

을 준비하여 쿼리를 준비하지만이 near '? ) AND ( user_fullname ? )'mysql을 내가 mysqli 준비 사용하여 쿼리를 준비하고

$query="DELETE FROM table WHERE ( quiz_answer ? ) AND (user_fullname ?)"; 
    $stmt = $mysqli->prepare($query); 


    $stmt->bind_param('ss',array('IS NULL','IS NULL')); 
    $stmt->execute(); 

이 도와주세요 사용할 수있는 권리 구문에 대한 MySQL 서버 버전에 해당하는 설명서를 확인 오류를주고있다 쿼리에서 문제를 발견했습니다. 미리 감사드립니다.

+0

매개 변수를 MySQL 구문에 바인딩하려는 이유를 모르겠습니까? – BenM

+0

check http://www.php.net/manual/en/mysqli.prepare.php – Damodaran

+0

SQL 삽입을 막기 위해 바인드 매개 변수를 사용하려고합니다. –

답변

0

$ answer와 $ fullname은 quiz_answer 및 user_fullname 매개 변수입니다. 심지어 매개 변수 결합으로 SQL 쿼리에 삽입하기 전에 실행되는

$answerString = 'IS NULL'; 
$userString = 'IS NULL'; 

if (trim($answer) && $answer != 'null') $answerString = '= ?'; 
if (trim($user) && $user != 'null') $userString = '= ?'; 

$query="DELETE FROM table WHERE ( quiz_answer $answerString ) AND (user_fullname $userString)"; 

$stmt = $mysqli->prepare($query); 

if ($answer && ! $fullname) $stmt->bind_param('s',array($answer)); 
if ($answer && $fullname) $stmt->bind_param('ss',array($answer, $fullname)); 
if (! $answer && $fullname) $stmt->bind_param('s',array($fullname)); 

$stmt->execute(); 

을하지만 난 추가적인 PARAM 유효성 검사를 제안한다 이 작동하지 않을 수 있습니다.

+0

php.net에서 바인드 매개 변수에 NULL 및 IS NULL을 사용할 수 없다는 것이 명확하게 언급되어 있습니다. –

+0

이상한,이 http://stackoverflow.com/questions/5214574/php-bind-params-with-null 그것이 작동합니다 보여줍니다. – Xardas

+0

그래, 쿼리 문자열을 부분별로 작성해야합니다. 대답이 비어 있다면 quiz_answer는 NULL이고 비어 있지 않으면 param 바인딩을 사용하십시오. 나는 PDO를 사용하여 조언을하고, 거기에 params라는 이름을 사용할 수 있습니다. – Xardas

관련 문제