데이터베이스의 행 일치 문제
P粉852114752
2023-08-25 20:51:42
<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</p>
<pre class="brush:php;toolbar:false;">받은 편지함에서 uid = "6961"
AND from_email = "abc 혜택 <abc@abcs.com>"</pre>
<p>이것은 $sql에서 인쇄한 쿼리이며 phpmyadmin의 데이터베이스에서 직접 실행하면 제대로 작동합니다. 나는 숫자 3을 받았지만 실행하면 0을 얻습니다. </p>
먼저, 쿼리에서 어떤 행도 찾지 못한다면 이는 일치 없음, 데이터가 정확하다고 맹세할 수 있더라도 hmm>을 의미한다는 사실을 받아들여야 합니다. 쿼리가 행을 반환하지 않으면 기준과 일치하는 행이 없다는 의미입니다. 그래서 당신은 알아내야 합니다 – 왜? 하지만 먼저 쿼리가 올바른지 확인해야 합니다.
SQL 오류로 인한 문제
먼저 쿼리가 실제로 오류 없이 실행되는지 확인해야 합니다. "결과 없음"은 쿼리에 오류가 있음을 의미할 수 있기 때문입니다. 자세한 내용은 pdo 및 mysqli 답변을 참조하세요.
조건으로 인한 문제
조건을 확인하세요.
WHERE col=1 AND col=2
와 같이 상호 배타적인 조건이 있습니다. 어떤 행도 반환하지 않습니다. 일부 행이 반환되기 시작할 때까지 조건을 단순화한 다음 조건을 구체화하여 원하는 결과를 얻으세요.하지만 좋습니다. 오류도 없고 조건도 정확하며 테이블의 데이터가 쿼리와 일치한다고 확신할 수 있습니다. 하지만 몇 가지 함정이 있습니다:
데이터로 인한 문제
먼저 변수가 관련되어 있으면 해당 변수가 존재하는지 실제로 어떤 값이 포함되어 있는지 확인하세요.
그런 다음 값 자체를 확인하세요. 입력 데이터(또는 데이터베이스)에 일부 변환되거나 인쇄할 수 없는 문자가 있을 수 있습니다. 줄 바꿈이나 특수하게 인코딩된 기호 또는 라틴어가 아닌 모든 문자를 코드로 변환하여 표시하는
和
>
。因此,包含
的查询永远不会匹配文本
。为了快速检查,您可以使用rawurlencode()
함수와 같이 HTML 엔터티로 변환된 특정 문자 등이 있습니다.문제는 단지 추측일 뿐이며 실제 문제가 무엇인지 아무도 말할 수 없다는 것입니다. 왜냐하면 귀하의 데이터베이스, 귀하 데이터를 입력하면 귀하만이 문제를 찾을 수 있기 때문입니다.
저는 PDO 문제를 디버깅하는 방법을 설명하는 글을 썼습니다.
특정 문제를 디버깅하려면
urlencode()
함수는 데이터베이스 및 입력에 인쇄할 수 없고 변환할 수 없는 모든 문자를 표시하는 데 도움이 됩니다.연결 자격 증명으로 인한 문제
또 다른 일반적인 문제는 여러 데이터베이스가 있고 요청한 데이터가 포함되지 않은 잘못된 데이터베이스에 연결하는 경우입니다. 이 질문은 이 질문과 유사하므로 동일한 루틴을 따르고 테이블 목록 대신 데이터 행만 확인하세요.
문자셋/인코딩으로 인한 문제
이것은 드문 상황이지만 확실히 하려면 이 훌륭한 답변
에 있는 체크리스트를 따르세요.