데이터베이스의 행과 일치하는 중에 문제가 발생했습니다.
P粉005105443
2023-07-25 10:47:08
<p>동일한 이메일이 데이터베이스에 이미 존재하는지 확인하기 위해 행 개수를 가져오고 싶습니다. 나는 여러 가지 방법을 시도했지만 성공하지 못했습니다. 데이터베이스에서 직접 쿼리를 실행하면 행 수가 반환되지만 PDO의 실행 메서드를 통해 0이 반환됩니다. </p>
<p>fetchAll 메소드를 사용하여 수동으로 계산을 시도했고 rowCount 메소드도 사용했지만 둘 다 작동하지 않았습니다. </p>
<pre class="brush:php;toolbar:false;">$sql = '받은 편지함에서 uid = ? AND from_email = ?';
$result = $link->prepare($sql);
$result->execute([$email_number,$email_f]);
$number_of_rows = $result->fetchColumn();</pre>
<p>문제는 HTML 코드가 포함된 $email_f 변수에 있습니다. </p>
<pre class="brush:php;toolbar:false;">받은 편지함에서 uid = "6961"인 편지함에서 개수(*) 선택
AND from_email = "abc 제안 <abc@abcs.com>"</pre>
<p>이것은 $sql에서 인쇄한 쿼리 문입니다. phpMyAdmin에서 직접 실행하면 제대로 작동하고 3개의 행 개수를 반환하지만, 실행 메서드를 통해 0을 반환합니다. </p>
우선, 쿼리에서 어떤 행도 찾지 못하면 데이터가 정확하다고 확신할 수 있더라도 일치하는 항목이 없다는 의미라는 사실을 받아들여야 합니다. 쿼리가 행을 반환하지 않으면 기준과 일치하는 행이 없는 것입니다. 그래서 이유를 알아내야 합니다. 하지만 먼저 쿼리가 올바른지 확인해야 합니다.
SQL 오류로 인한 문제
먼저 쿼리에 실제로 오류가 없는지 확인해야 합니다. "결과 없음"은 쿼리에 오류가 있음을 의미할 수 있기 때문입니다. 쿼리. 자세한 내용은 pdo 및 mysqli 답변을 참조하십시오.
조건으로 인한 문제
조건을 확인하세요. WHERE col=1 AND col=2와 같이 상호 배타적인 조건이 있습니다. 어떤 행도 반환하지 않습니다. 일부 행이 반환되기 시작할 때까지 조건을 단순화한 다음 조건을 구체화하여 원하는 결과를 얻으세요.
하지만 좋습니다. 오류는 없습니다. 조건은 정확하며 테이블에 쿼리와 일치하는 데이터가 있다고 확신할 수 있습니다. 그러나 여전히 몇 가지 함정이 있습니다.
데이터로 인한 문제
먼저 변수가 관련된 경우 변수가 존재하고 실제로 어떤 값을 포함하고 있는지 확인하세요.
그런 다음 값 자체를 확인하세요. 입력 데이터(또는 데이터베이스)에 일부 변환되거나 인쇄할 수 없는 문자가 있을 수 있습니다. 예를 들어, 줄바꿈이나 특수하게 인코딩된 기호 또는 < 및 >와 같은 특정 문자는 HTML 엔터티로 변환됩니다. 결과적으로 <abc@abcs.com>이 포함된 텍스트를 쿼리하면 <abc@abcs.com> 텍스트가 일치하지 않습니다. 라틴어가 아닌 모든 문자를 코드로 변환하여 표시하는 rawurlencode() 함수를 사용하여 빠르게 확인할 수 있습니다.
문제는 이것이 단지 추측일 뿐이고 실제 문제가 무엇인지 아무도 말할 수 없다는 것입니다. 왜냐하면 그것은 귀하의 데이터베이스이고 입력 데이터이며 귀하만이 문제를 찾을 수 있기 때문입니다.
PDO 문제를 디버깅하는 방법을 설명하는 기사를 썼습니다.특정 문제를 디버깅하려면 다음이 필요합니다.
연결 자격 증명으로 인한 문제
또 다른 일반적인 문제는 여러 데이터베이스가 있고 요청한 데이터가 없는 잘못된 데이터베이스에 연결하는 경우입니다. 이 질문은 이전 질문과 유사하므로 테이블 목록을 확인하는 대신 데이터 행을 확인하는 것을 제외하고 동일한 단계를 따르십시오.
문자셋/인코딩으로 인한 문제
이것은 드문 경우이지만 확실히 하기 위해 다음을 따르십시오. 훌륭한 답변