2014-02-17 57 views
1

我的插入查询有问题。我试图从会话变量中获取用户ID,并将其与通过表单输入的其他变量一起插入到表中。无法通过参考传递参数 - MySQLi

我试过打印$ userid变量,它显示为1,这是正确的。 bind_param语句似乎不接受它。

我不断收到此错误

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

第29行是$ stmt-> bind_param线。

PHP代码:

<?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{ 
?> 

这是形式:

<?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

什么是第29行?如果我看看你的代码,第29行似乎是“?>”,我非常怀疑是错误的位置 – Tularis

+0

第29行是$ stmt-> bind_param – slopedoo

+0

我认为你有一个名为'sec_session_start )'这在其他地方被称为?如果没有,那么你的意思是使用'session_start();';-) –

回答

3

bind_param电话不能使用'Open'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)哈哈,但会upvote ;-) –

+0

@ Fred-ii-:我注意到您的意见后,我发布了! :-D –

+0

谢谢,这工作! – slopedoo