함수 - php mysqli




PHP에서 MySQL/Apache 오류 MySQL 쿼리 (8)

실제로 동일한 연결 호출을 사용하여 삽입 할 수있는 경우 문제는 데이터베이스에 대한 SELECT 권한이없는 사용자 "apache"에 있습니다. phpMyAdmin을 설치했다면 권한 창에서 해당 사용자의 권한을 볼 수 있습니다. phpMyAdmin을 사용하면 권한을 쉽게 수정할 수 있습니다.

명령 행에만 접근 할 수 있다면 mysql 데이터베이스에서 권한을 검사 할 수있다.

아마도 다음과 같이해야 할 것입니다.

부여 선택 myDatabase.myTable '아파치'@ '로컬 호스트';

다음과 같은 오류가 발생합니다.

사용자 'apache'@ 'localhost'에 대한 액세스가 거부되었습니다 (비밀번호 사용 : 아니요).

다음 코드를 사용할 때 :

<?php

include("../includes/connect.php");

$query = "SELECT * from story";

$result = mysql_query($query) or die(mysql_error());

echo "<h1>Delete Story</h1>";

if (mysql_num_rows($result) > 0) {
    while($row = mysql_fetch_row($result)){
          echo '<b>'.$row[1].'</b><span align="right"><a href="../process/delete_story.php?id='.$row[0].'">Delete</a></span>';
      echo '<br /><i>'.$row[2].'</i>';
    }
}
else {
   echo "No stories available.";
}
?>

connect.php 파일에는 소프트웨어의 다른 부분에서 내 INSERT 쿼리와 잘 작동하는 MySQL 연결 호출이 포함되어 있습니다. $result = mysql_query 줄을 주석 처리하면 else 문으로 넘어갑니다. 그래서, 그 라인이나 if의 내용입니다.

내가 그물을 검색해 봤는데, 대부분의 MySQL 연결과 관련이 있거나 사용자가 MySQL에 로그인 할 때 권한이 없기 때문이다. 나는 둘 다 확인했다. 소프트웨어의 다른 곳에서도 다른 쿼리를 계속 수행 할 수 있으며 계정에 올바른 권한이 있는지 확인했습니다.


아파치 사용자가 데이터베이스에 연결하려면 암호가 필요합니까? 그렇다면 "password : NO"를 사용한다는 사실로 인해 코드가 암호없이 연결하려고한다고 생각하게됩니다.

그러나 apache 사용자가 암호를 요구하지 않으면 사용 권한을 다시 한 번 확인하는 것이 좋습니다. mysql 프롬프트에서 다음과 같이 실행하는 것이 여전히 도움이 될 수 있습니다.

databasename .* to 'apache'@'localhost'; GRANT ALL PRIVILEGES ON .* to 'apache'@'localhost';

그 구문은 정확해야합니다.

그 이외에, 나는 너처럼 잘 다툴거야.


connect.php 스크립트가 실제로 연결을 설정합니까 아니면 그냥 연결을 만들기 위해 호출해야하는 함수를 정의합니까? 당신이 얻는 오류는 이전에 확립 된 연결이 전혀 없다는 것에 대한 증상입니다.

ETA : 필수 항목을 포함 항목으로 변경하십시오. 나는 그것이 파일을 실제로 포함하고 있지 않다고 의심한다. 그러나 include는 자동으로 실패 할 수 있습니다.


include ()를 require ()로 변경하십시오. "connect.php"파일이 require () d 일 수없는 경우, 스크립트는 치명적인 오류로 실패 하지만 include ()는 경고 만 생성합니다 . mysql_connect ()에 전달하는 사용자 이름이 "apache"가 아닌 경우 연결 스크립트에 대한 잘못된 경로가 이러한 유형의 오류를 가져 오는 가장 일반적인 방법입니다.


젠체하는 대답은 큰 DUH이다! 불행하게도 그것은 잘 이해하기 위해 나에게 어느 정도 걸렸다. 아마도 dbconnect ()와 같은 함수를 가지고 있으며, 인클루드 파일의 변수를 사용하여 연결을 만들 수 있습니다. $ conn = mysql_connect ($ dbhost, $ dbuser, $ dbpass).

이것은 함수 안에 있기 때문에 include 파일의 변수를 함수에 전달해야합니다. 그렇지 않으면 함수는 $ dbhost, $ dbuser 및 $ dbpass가 무엇인지 알 수 없습니다. 이 문제를 해결하는 방법은 전역 변수를 전역 함수로 만들 수 있도록하는 것입니다. 매우 안전하지 않은 또 다른 솔루션은 호스트, 사용자를 작성하고 mysql_connect 함수를 전달하는 것입니다.

희망이 도움이되지만 같은 문제가 있었다.


꼭 기억해야 할 사항 :

flush privileges;

사용자가 설정되어 있지 않으면 'apache'@ 'localhost'오류가 발생합니다.


확인하기 만하면 이 부분 사용하면 오류가 발생합니까?

<?php
include("../includes/connect.php");

$query = "SELECT * from story";
$result = mysql_query($query) or die(mysql_error());

그렇다면이 삽입물 중 하나를 복사하여이 페이지에 붙여 넣으면 오류가 발생합니까, 페이지 또는 해당 실제 행에 국한되어 있는지 확인하려고합니다.

또한 삽입이이 예제와 정확히 같은 구문을 사용하지 않는 한 연결 호출 복사본을 게시 할 수 있습니다 (암호 빼기).


다음 중 하나를 수행 할 수 있습니다.

  • 사용자 "apache"를 추가하고 phpmyadmin에서 해당 권한을 설정하거나 셸에서 mysql을 사용하십시오
  • PHP가 mysql_connect 를 다른 사용자, 이미 권한이있는 사람 (루트가 아닐 수도 있음)으로 실행하고 php.ini 파일에서 mysql.default_user를 찾는다.




mysql