2014-02-17 5 views
1

삽입 쿼리에 문제가 있습니다. 세션 변수에서 사용자 ID를 가져 와서 폼을 통해 입력되는 다른 변수와 함께 테이블에 삽입하려고합니다.참조로 매개 변수를 전달할 수 없습니다 - MySQLi

$ userid 변수를 인쇄하려고 시도했는데 올바른 것으로 1이 표시됩니다. bind_param 문은 그냥 받아들이지 않는 것 같습니다.

나는 $ stmt-> bind_param 라인은 라인 (29)이 오류를

Cannot pass parameter 5 by reference in /*** on line 29 

입니다 점점 ​​계속.

PHP 코드는 :

<?php 
$sql = "SELECT * FROM priority"; 
$result = mysqli_query($con, $sql) or die (mysql_error()); 
$priority_id=''; 
while ($row = mysqli_fetch_array($result)){ 
    $id=$row["id"]; 
    $priority=$row["priority"]; 
    $priority_id.="<OPTION VALUE=\"$id\">".$priority; 
} 

$sql = "SELECT * FROM members"; 
$result = mysqli_query($con, $sql) or die (mysql_error()); 
$assigned_id=''; 
while ($row = mysqli_fetch_array($result)){ 
    $id=$row["id"]; 
    $name=$row["name"]; 
    $assigned_id.="<OPTION VALUE=\"$id\">".$name; 
} 

?> 

<div id="ticketSubmit"> 

    <form action="<?php $_PHP_SELF ?>" method="post"> 
     <fieldset> 
     <legend>Post content</legend> 
     <div> 
      <label for="post_subject"> 
      <strong>Choose a subject</strong> for the post 
      </label> 
      <input id="post_subject" name="post[title]" type="text"> 
     </div> 
     <div> 
      <label for="post_description"> 
      <strong>Supply actual content</strong> for the post 
      </label> 
      <textarea id="post_description" name="post[description]"></textarea> 
     </div> 


     </fieldset> 
     <fieldset> 
     <legend>Post metadata</legend> 
     <div class="inline"> 
      <label for="post_assigned"> 
      <strong>Choose who assigned</strong> the post 
      </label> 
      <select id="post_assigned" name="post[assigned]"> 
       <option> <? echo $assigned_id ?> </option> 
      </select> 

      <label for="post_category"> 
      <strong><span style="margin-left:28px">Choose which group</strong> the post is for 
      </label> 
      <input id="post_category" name="post[category]" type="text"> 

      <label for="post_priority"> 
      <strong><span style="margin-left:28px">Choose priority</strong> for the post 
      </label> 
      <select id="post_priority" name="post[priority]"> 
      <option> <? echo $priority_id ?> </option> 
      </select> 

     </div> 

     </fieldset> 
     <fieldset> 
     <legend>Post privacy</legend> 
     <div class="inline"> 
      <input id="post_allow_comments" name="post[allow_comments]" type="checkbox"> 
      <label for="post_allow_comments"> 
      <strong>Allow comments</strong> on the post 
      </label> 
     </div> 
     <div class="inline"> 
      <input id="post_private" name="post[private]" type="checkbox"> 
      <label for="post_private"> 
      <strong>Make private</strong> so that only friends see it 
      </label> 
     </div> 
     </fieldset> 
     <p> 
     <input name = "submit" type="submit" id="submit" value="Submit Ticket"> 
     or 
     <a href="../index.php">cancel and go back</a> 
     </p> 
    </form> 
</div> 
+0

what 's line 29? 내가 당신의 코드를 보면, 29 행은 "오류가있는 위치를 의심하는"?> "것 같다. – Tularis

+0

29 행은 $ stmt-> bind_param – slopedoo

+0

나는'sec_session_start)'그것은 다른 곳에서 불리고 있습니까? 그렇지 않다면'session_start();';-)를 사용하기로했다. –

답변

3

당신은 당신의 bind_param 호출 'Open'을 사용할 수 없습니다

<?php 
sec_session_start(); 

if (login_check($mysqli) == true) : 

$table = "ticket"; 
$con = connect($table); 


if(isset($_POST['submit'])){ 

    $stmt = $con->prepare('INSERT INTO `ticket` (`subject`, `description`, `assigned`, `status`, `user_id`, `priority_id`, `employee_id`) VALUES (?, ?, ?, ?, ?, ?, ?)'); 

     if (!$stmt) { 
      throw new Exception($con->error, $con->errno); 
     } 

     $userid = $_SESSION['id']; 

     $stmt->bind_param('sssssss', $_POST['post_subject'], $_POST['post_description'], $_POST['post_assigned'], 'Open', $userid, $_POST['post_priority'], $_POST['post_employee']); 

     if (!$stmt->execute()) { 
      throw new Exception($stmt->error, $stmt->errno); 
     } 

     mysqli_close($con); 
    } 
    else{ 
?> 

이는 형태입니다. bind_param은 각 매개 변수가 참조 인이 필요합니다.

먼저 변수에 저장해야합니다.

$status = 'Open'; 
$stmt->bind_param('sssssss', $_POST['post_subject'], $_POST['post_description'], $_POST['post_assigned'], $status, $userid, $_POST['post_priority'], $_POST['post_employee']); 
+0

['14 초]에 이길 (http://stackoverflow.com/questions/21834455/cannot- pass-parameter-by-reference-mysqli # comment33048080_21834455) lol하지만 upvote ;-) –

+0

@ Fred-ii- : 게시 한 직후 귀하의 코멘트를 보았습니다! :-D –

+0

고맙습니다. – slopedoo

관련 문제