2014-02-23 4 views
0

저는 CMS를 구축 중이며 스크립트에서 많이 나타나는 몇 가지 SQL 작업을 처리하는 몇 가지 함수를 작성했습니다.함수 내에서 가변 변수를 생성하십시오.

function execute_sql_query($stmt,$types,$var1,$query_success,$object_name,$sql_action) 
{ 
    if(mysqli_stmt_bind_param($stmt, $types, $var1)) 
    { 
     if(!mysqli_stmt_execute($stmt)) 
     { 
      echo 'MySQL Execution Error: ' . $object_name . '<br>'; 
      $query_success = FALSE; 
      echo "<br />"; 
     } 
     else 
     { 
      echo $object_name . ' successfully ' . $sql_action . '<br>'; 
     } 
    } 
    else 
    { 
     echo 'MySQL Bind Error: ' . $object_name . '<br>'; 
     $query_success = FALSE; 
    } 
} 

function sql_close($stmt,$query_success,$mysqli) 
{ 
    mysqli_stmt_close($stmt); 
    if ($query_success) 
    { 
     echo 'All changes were successfully saved!<br>'; 
     mysqli_commit($mysqli); 
    } 
    else 
    { 
     echo 'No changes were made to the database because of detected errors<br>!' 
     mysqli_rollback($mysqli); 
    } 
} 

코드는 스크립트에서 다음과 같이 호출됩니다 : 다음과 같은 기능은 돼있로

mysqli_autocommit($mysqli, FALSE); 
$query_success = TRUE; 
if($stmt = mysqli_prepare($mysqli, "DELETE FROM galleries WHERE gal_num = ?")) 
{ 
    $types = 's'; 
    $object_name = "Galleries"; 
    $sql_action = "deleted"; 
    execute_sql_query($stmt,$types,$gal_del,$query_success,$object_name,$sql_action); 
} 
sql_close($stmt,$query_success,$mysqli); 

지금이 작품 그것은 나에게 많은 타이핑의 지옥을 절약 할 수 있습니다. 나는 이런 종류의 접근법에 대해 단 하나의 문제를 가지고있다.

이 쿼리에는 단 하나의 매개 변수 만 바인딩됩니다. 일부는 데이터베이스 테이블에서 3, 5 또는 12 개의 다른 필드를 변경합니다. 이 함수는 하나만 처리 할 수 ​​있습니다. 쿼리가 그 이상을 처리하는 경우 다른 양의 매개 변수를 바인딩하는 각각에 대해 다른 함수를 작성해야합니다. 그것은 주로 복사 및 붙여 넣기 작업을하지만 일종의이 기능을 퍼팅의 유용성을 부정합니다.

이 유형에 관해서

, 이것은 단순히 문자열이므로 쿼리가 5 개 매개 변수를 결합하면, 나는 단순히 그것을

$type = 'sssss'; 

아니 문제를 제공 할 수 있습니다. 바인딩 될 변수에 대해이 작업을 수행 할 수있는 방법을 찾지 못했습니다. 거기에 어떻게 든 내 함수를 범위 또는 변수의 배열 (아마도 함수 내에서 기능?) 피드를 자동으로 생성됩니다 그래서 나는 이러한 모든 쿼리를 단일 함수 내에서 유지할 수있는 방법이 있나요?

3 개의 매개 변수를 바인딩해야한다고 말하십시오.

$types = 'sss'; 
$bind_vars = 3; 

그리고 함수 내

가 생성 다음과 같습니다 :

if(mysqli_stmt_bind_param($stmt, $types, $var1, $var2, $var3)) 

가이 작업을 수행 할 수 있습니다 나는 그것을 다음과 같은 먹이를? 협조 해 주셔서 미리 감사드립니다.

답변

0

편집 : 내 이전의 대답은 완전히 내 부분에 대해 오해했기 때문에 삭제되었습니다. 배열은 여전히 ​​올바른 접근 방식입니다. 다음과 같이하십시오.

+0

답장을 보내 주셔서 감사합니다. 나는이 솔루션과 매우 비슷한 배열로 놀고 있었지만 그렇게 할 수는 없었다. 내 문제는 // 뭔가를 수행하는 것입니다. :) 내가 아는 한, mysqli_stmt_bind_param()은 주어진 변수 내에 포함 된 매개 변수를 바인드하는 내장 함수이다. 바인딩해야하는 값의 배열을 제공하는 경우 foreach() 루프에서 올바르게 묶는 방법을 어떻게 말해야합니까? – Insomniaboy

+0

나는 당신을 완전히 오해 한 것 같아, 내 대답을 편집하여 당신에게 가치있는 것을 얻도록 노력할 것입니다. –

+0

굉장합니다. 무리 감사. 이것으로 작동하게 만들었습니다. – Insomniaboy

관련 문제