2013-02-24 4 views
-3

작동하도록 점점 데 :문제가 내 준비된 문이 나는 다음과 같은 기능을 가지고

function get_config($name = '') 
{ 
    $config = array(); 
    $row = array(); 
    $sql = "SELECT * FROM ".$GLOBALS['prefix']."config "; 
    if ('' != $name) {$sql .= " WHERE name = '". $name ."'";} 
    $result = $GLOBALS['conn']->query($sql); 
    while ($row = $result->fetch()) {$config[$row['name']] = $row['value'];} 
    if ('' != $name){return $config[$name];} 
} 

을 내 모든 사이트 설정을 호출하려면이 옵션을 사용합니다. 나는 이것을 위해 준비된 진술을 사용하고 싶었다.

function get_config($name = '') 
{ 
    $config = array(); 
    $row = array(); 
    $sql = "SELECT * FROM config"; 
    if ('' != $name) { 
    $sql .= " WHERE name = 'home'"; 
    } 
    $result = $GLOBALS['conn']->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); 
    $result->execute(array(':name' => $name)); 
    while ($row = $result->fetch()) { 
    $config[$row['name']] = $row['value']; 
    } 
    if ('' != $name) { 
    return $config[$name]; 
    } 
} 

하지만 지금은 기능이 작동하지 않습니다 : 여기에

내가 준비 문을 추가 할 때 내가 한 것입니다. 왜 일하지 않는거야?

+0

[PHP PDO 준비된 문] (http://stackoverflow.com/questions/1457131/php-pdo-prepared-statements) – mario

+0

의 가능한 복제물 플랫 키 : 값 구성 저장소로 사용하는 경우 한 번에 모든 항목을 가져와 대신 배열에 보관하는 것이 좋습니다. – mario

+0

@mario 그 밖의 다른 작업은 무엇입니까? 그것이 내가 실제로하려고하는 것이기 때문에, 더 좋은 방법이 있다면, 그것에 대해 말해주십시오. – shnisaka

답변

3

(현재 삭제 된) duplicate에서 내 대답을 마이그레이션하고 있습니다.

당신은 :name 자리로 문을 실행하고 있지만, 쿼리 자체가 아니다 :

function get_config($name = 'home') 
{ 
    $config = array(); 
    $row = array(); 
    $sql = "SELECT value FROM config WHERE name = :name"; 

    $result = $GLOBALS['conn']->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); 
    $result->execute(array(
     ':name' => $name 
    )); 

    return array(
     $name => current($result->fetchALL(PDO::FETCH_COLUMN, 0)) 
    ); 
} 

두 가지 주요 변경 변경하는 것 :

function get_config($name = 'home') 

매개 변수없이 함수를 호출하면 $name의 기본값은입니다..

return current($result->fetchAll(PDO::FETCH_COLUMN, 0)); 

fetchAll()은 각 배열 항목의 첫 번째 열만있는 배열을 반환합니다. current()을 적용하면 배열이 비어있는 경우 첫 번째 (및 유일한) 배열 항목 또는 false을 반환합니다.

주의

사용하여 데이터베이스를 사용하지 않는 것이 좋습니다는 $GLOBALS에서 처리; get_config()에 인스턴스를 전달하거나 get_config()을 해당 생성자에서 데이터베이스 핸들로받는 클래스의 메소드로 지정하는 것이 좋습니다.

+0

당신이 그 두 줄을 설명 할 수 있다면 그것은 좋을 것입니다 :' ': name'=> $ name? : 'home''과'current ($ result-> fetchALL (PDO :: FETCH_COLUMN, 0));' – shnisaka

+1

@ 물론, 업데이 트되었습니다. 어떤 이유로 든 –

+0

, 나는 결과의 첫 번째 문자 만 얻고 있습니다. 무엇이 문제 일 수 있습니까? – shnisaka

관련 문제