2010-03-30 3 views
0

성능을 향상시키기 위해 이전 쿼리 중 일부를 Mysqli 프레임 워크로 변경했습니다. 모든 것이 로컬 호스트에서 잘 작동하지만, 웹 서버에 업로드하면 아무 것도 출력되지 않습니다. 연결 후 오류가 있는지 확인하고 오류가 없는지 확인합니다. 나는 또한 PHP 모듈이 설치되어 있고 mysqli가 활성화되어 있는지 확인했다.Mysqli 쿼리는 웹 서버가 아닌 localhost에서만 작동합니다.

나는 오류가 표시되지 않으므로 데이터베이스에 연결된다는 것을 확신합니다.

$mysqli = new mysqli("server", "user", "password"); 

if (mysqli_connect_errno()) { 
    printf("Can't connect Errorcode: %s\n", mysqli_connect_error()); 
    exit; 
} 

// Query used 
$query = "SELECT name FROM users WHERE id = ?"; 

if ($stmt = $mysqli->prepare("$query")) 
{ 

    // Specify parameters to replace '?' 
    $stmt->bind_param("d", $id); 

    $stmt->execute(); 

    // bind variables to prepared statement 
    $stmt->bind_result($_userName); 

    while ($stmt->fetch()) 
    { 
      echo $_userName; 
    } 


    $stmt->close(); 
} 
} 

//close connection 
$mysqli->close(); 

이 코드 내 localserver에 완벽하게 작동 말했듯이 :

은 다음과 같습니다 웹 서버에 쿼리로부터 출력 없다 (내가 데이터베이스 이름 문자열을 변경할 때 오류를 준) 그냥 온라인이 아니야. 오류 로그를 확인 했으므로 모든 것이 좋은 연결을 가리키고 있습니다. 이 모든 사람이 나를 붙잡 았기 때문에 모든 테이블이 존재합니다. 또한, 내가이 작동되면, 내 모든 다른 쿼리가 여전히 작동합니까? 아니면 mysqli 프레임 워크를 사용해야 할 것인가? 미리 감사드립니다.

편집 :

확인 필자 무슨 일이 일어나고 있는지보고 몇 가지 '디버깅'다. 내가 쿼리와 일치하는 테이블에 데이터가 있습니다. 그래서 기본적으로는 한 Statment 전에 출력 '디버그 1'은 (는 않는)를 준비해야

echo "debug 1"; 

if ($stmt = $mysqli->prepare("$shiftQuery")) 
{ 

echo "debug 2"; 
printf("Error: %s.\n", $stmt->error); 

etc... 
} 

: 나는하여 준비 문을 확인하려면 다음을했다. 그런 다음 '디버그 2'및 발생한 모든 오류를 출력해야합니다.

IF 문에서 디버그 2 행에 도달하지 않아 문제가 발생합니다. 연결 세부 정보가 좋기 때문에 $ mysqli 객체가 생성되지 않는 이유는 실제로 알 수 없습니다. 그 누군가에게 더 이상의 아이디어를 줄까요 ???

감사

+1

을하는 데 도움이

$sql = "SELECT name FROM users WHERE id = ?"; if($stmt = $mysqli->mysqli->prepare($sql)){ $stmt->bind_param("i", $id); if($stmt->execute()){ $stmt->bind_result($name); $stmt->store_result(); if($stmt->fetch()){ return $name; }else{ return 'Not Found'; } }else{ return 'Execute Error'; } }else{ return 'SQL Error'; } 

희망처럼 내 mysqli를 실행? 이것은 생성자의 네 번째 매개 변수이거나 mysqli :: select_db 호출이다. – VolkerK

+0

글쎄, 당신은 VolkerK 머리에 못을 박았습니다. 이전 연결 방법에서 세 가지 연결 매개 변수를 사용했습니다.내가 업로드 한 것은 데이터베이스를 선택하지 않는 것이었지만 localserver에서는 다른 연결 스크립트를 호출 할 때 선택되었습니다. 의견을 보내 주셔서 감사합니다. 언제나 환영합니다. – whamo

답변

0

Mysqli 프레임 워크는 성능이 향상되지 않습니다.
오류 검사는 연결 후뿐만 아니라 각 쿼리가 실행 된 후에 수행되어야합니다.

오류
아니면 mysqli/STMT 각 메소드 호출이 실패 할 수 있습니다 throwed 예외

+0

mysqli는 스토어드 프로 시저를 호출하면 성능을 향상시킬 수있다. 필자는 sprocs v. inline SQL 호출을 비교하는 많은 벤치 마크를 수행했으며이를 사용하여 더 낮은 오버 헤드로 많은 처리량을 얻을 수 있습니다. –

+0

@ f00 * call * 메서드가 * 내부 계산 *에 영향을 줄 수있는 방법은 무엇입니까? –

+0

답장을 보내 주셔서 감사합니다. 다른 사용자 ID 등을 여러 번 전달하는 쿼리를 저장하는 데 사용하므로 성능에 도움이됩니다. 어쨌든 stmt 오류가 있는지 확인하고 출력이 없습니다. 이것은 나에게 수수께끼이다. 제발 누군가 도와주세요! 건배 – whamo

2

에 대해 확인하려고에 대한 확인 $stmt->error. 당신은 모두를 확인해야합니다.

<?php 
error_reporting(E_ALL); ini_set('display_errors', 1); 

// passing database name as fourth parameter 
$mysqli = new mysqli("server", "user", "password", 'dbname'); 
if (mysqli_connect_errno()) { 
    printf("Can't connect Errorcode: %s\n", mysqli_connect_error()); 
    exit; 
} 

// Query used 
$query = "SELECT name FROM users WHERE id = ?"; 

if (false===($stmt=$mysqli->prepare("$query"))) { 
    echo 'mysqli::prepare failed: ', htmlspecialchars($mysqli->error); 
    die; 
} 

// Specify parameters to replace '?' 
$rc = $stmt->bind_param("d", $id); 
if (!$rc) { 
    echo 'bind_param failed: ', htmlspecialchars($stmt->error); 
    die; 
} 

echo '<pre>Debug: execute()</pre>'; 
$rc = $stmt->execute(); 
if (!$rc) { 
    echo 'execute failed: ', htmlspecialchars($stmt->error); 
    die; 
} 

echo '<pre>Debug: bind_result()</pre>'; 
// bind variables to prepared statement 
$rc = $stmt->bind_result($_userName); 
if (!$rc) { 
    echo 'bind_result failed: ', htmlspecialchars($stmt->error); 
    die; 
} 

echo '<pre>Debug: fetch()</pre>'; 
while ($stmt->fetch()) 
{ 
    echo 'username: ', $_userName; 
} 
echo '<pre>Debug: stmt close()</pre>'; 
$stmt->close(); 

echo '<pre>Debug: mysqli close()</pre>'; 
$mysqli->close(); 
1

MySQL 사용자 권한에 = error_reporting은 (E_ALL) 어쩌면 display_error으로 시도하는 것은 민감한 호스트 - 그것은 다른 호스트 다른 권한에서 로컬 호스트 및 사용자 1에서 사용자 1을 제공 할 수 있습니다.

GRANT ALL ON *.* TO [email protected]'%' IDENTIFIED BY 'password'; 
0

Id은 정수입니까? 데이터베이스를 선택합니까 어디에서 일반적으로

관련 문제