>  Q&A  >  본문

데이터베이스의 행 일치 문제

<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>
P粉852114752P粉852114752421일 전541

모든 응답(1)나는 대답할 것이다

  • P粉879517403

    P粉8795174032023-08-26 12:59:05

    먼저, 쿼리에서 어떤 행도 찾지 못한다면 이는 일치 없음, 데이터가 정확하다고 맹세할 수 있더라도 hmm>을 의미한다는 사실을 받아들여야 합니다. 쿼리가 행을 반환하지 않으면 기준과 일치하는 행이 없다는 의미입니다. 그래서 당신은 알아내야 합니다 – 왜? 하지만 먼저 쿼리가 올바른지 확인해야 합니다.

    SQL 오류로 인한 문제

    먼저 쿼리가 실제로 오류 없이 실행되는지 확인해야 합니다. "결과 없음"은 쿼리에 오류가 있음을 의미할 수 있기 때문입니다. 자세한 내용은 pdomysqli 답변을 참조하세요.

    조건으로 인한 문제

    조건을 확인하세요. WHERE col=1 AND col=2와 같이 상호 배타적인 조건이 있습니다. 어떤 행도 반환하지 않습니다. 일부 행이 반환되기 시작할 때까지 조건을 단순화한 다음 조건을 구체화하여 원하는 결과를 얻으세요.


    하지만 좋습니다. 오류도 없고 조건도 정확하며 테이블의 데이터가 쿼리와 일치한다고 확신할 수 있습니다. 하지만 몇 가지 함정이 있습니다:

    데이터로 인한 문제

    먼저 변수가 관련되어 있으면 해당 변수가 존재하는지 실제로 어떤 값이 포함되어 있는지 확인하세요.

    그런 다음 값 자체를 확인하세요. 입력 데이터(또는 데이터베이스)에 일부 변환되거나 인쇄할 수 없는 문자가 있을 수 있습니다. 줄 바꿈이나 특수하게 인코딩된 기호 또는 라틴어가 아닌 모든 문자를 코드로 변환하여 표시하는 <>。因此,包含 的查询永远不会匹配文本 。为了快速检查,您可以使用 rawurlencode() 함수와 같이 HTML 엔터티로 변환된 특정 문자 등이 있습니다.

    문제는 단지 추측일 뿐이며 실제 문제가 무엇인지 아무도 말할 수 없다는 것입니다. 왜냐하면 귀하의 데이터베이스, 귀하 데이터를 입력하면 < strong>귀하만이 문제를 찾을 수 있기 때문입니다.

    저는 PDO 문제를 디버깅하는 방법을 설명하는 글을 썼습니다.

    특정 문제를 디버깅하려면

    • PDO와 PHP 모두에 대해 전체 오류 보고가 활성화되어 있는지 확인하세요. 정말 도움이 되며 가끔씩 발생하는 인쇄상의 오류, 철자 오류 등을 보여줄 수 있습니다.
    • 데이터베이스의 데이터와 입력을 다시 확인하여 불일치를 찾으세요. urlencode() 함수는 데이터베이스 및 입력에 인쇄할 수 없고 변환할 수 없는 모든 문자를 표시하는 데 도움이 됩니다.

    연결 자격 증명으로 인한 문제

    또 다른 일반적인 문제는 여러 데이터베이스가 있고 요청한 데이터가 포함되지 않은 잘못된 데이터베이스에 연결하는 경우입니다. 이 질문은 이 질문과 유사하므로 동일한 루틴을 따르고 테이블 목록 대신 데이터 행만 확인하세요.

    문자셋/인코딩으로 인한 문제

    이것은 드문 상황이지만 확실히 하려면 이 훌륭한 답변

    에 있는 체크리스트를 따르세요.

    회신하다
    0
  • 취소회신하다