2014-04-03 75 views
0

我正在处理一个php脚本,它在其相应的用户帐户表中存储消息id(Msg_ID,Ref_ID)。选择一个auto_increment字段返回空白在php

我所知道的是,Msg_ID被正确写入,但Ref_ID始终为空。 如何当我分别运行查询它的作品,但不能在脚本中出于某种奇怪的原因。

下面是代码:

$qry = "SELECT Ref_ID FROM Chat WHERE Msg_ID = " .$MsgID. ")"; 
    $resp = mysqli_query($con, $qry); 

    $xx = mysqli_fetch_array($resp); 
    $ref_id = $xx['Ref_ID']; 

    foreach ($Array as $user){ 
     $query = "Insert into ".$user."(POST_ID, REF_ID) values ('". $MsgID . "', '" .$ref_id. "')"; 
     mysqli_query($con, $query); 
    } 

的$ REF_ID始终是空白,因此,空值被写入到相应的数据库。 一些有助于解决问题的方法将有所帮助。

下面是完整的代码:聊天表

<?php 
function PostMainThread($Heading, $Message, $Author, $MarkedList){ 
    $con=mysqli_connect("mysql.serversfree.com", "u521497173_root", "123456", "u521497123_mydb"); 
    $Array = explode(',', $MarkedList); 
    if (mysqli_connect_errno()){ 
     $response["success"] = 0; 
     $response["message"] = "Connection Failed."; 
     echo json_encode($response); 
    }else{ 
     here:$MsgID = rand(1, 9999999); 
     $query = "Insert into Chat(Msg_ID, Header, MsgBody, Author) values (". $MsgID . "," . "'" . $Heading . "' ," . 
      "'" . $Message . "', '". $Author . "')"; 
     $result=mysqli_query($con, $query); 
     if (!$result){ 
      goto here; 
     }else{ 
      //Put the MsgID in the respective user tables. 
      $qry = "SELECT Ref_ID FROM Chat WHERE Msg_ID = " .$MsgID. ")"; 
      $resp = mysqli_query($con, $qry); 

      $xx = mysqli_fetch_array($resp); 
      $ref_id = $xx['Ref_ID']; 

      foreach ($Array as $user){ 
       $query = "Insert into ".$user."(POST_ID, REF_ID) values ('". $MsgID . "', '" .$ref_id. "')"; 
       mysqli_query($con, $query); 
      } 

      $response["success"] = 1; 
      $response["message"] = "Submission successful."; 
      mysqli_close($con); 
      echo json_encode($response); 
     } 

    } 
} 

function PostReplyToThread($PostID, $Author, $Reply){ 
    $con=mysqli_connect("mysql.serversfree.com", "u521497123_root", "123456", "u521497123_mydb"); 
    if (mysqli_connect_errno()){ 
     echo 2; 
    }else{ 
     $query = "Insert into Chat(Msg_ID, Header, MsgBody, Author) values (". $PostID . "," . "'" . " " . "' ," . 
      "'" . $Reply . "', '". $Author . "')"; 
     $result=mysqli_query($con, $query); 
     if ($result){ 
      echo 3; 
     }else{ 
      echo 4; 
     } 
     mysqli_close($con); 
    } 
} 

if (isset($_POST['what_to_do'])){ 
    if ($_POST['what_to_do'] == 0){ 
     if ((isset($_POST['Title'])) &&(isset($_POST['Body']))&&(isset($_POST['Marked']))&&(isset($_POST['_Author']))){ 
      PostMainThread($_POST['Title'], $_POST['Body'], $_POST['_Author'], $_POST['Marked']); 
     } 
    }else if ($_POST['what_to_do'] == 1){ 
     if ((isset($_POST['Thread_ID'])) &&(isset($_POST['Answer']))&&(isset($_POST['_Author']))){ 
      PostReplyToThread($_POST['Thread_ID'], $_POST['_Author'], $_POST['Answer']); 
     } 
    } 
}else{ 
    $response["success"] = 0; 
    $response["message"] = "Unspecified action"; 
    echo json_encode($response); 
} 

定义:

Create table Chat(Ref_ID INT Auto_Increment, Msg_ID INT, Header varchar(50), MsgBody varchar(500 
), Author varchar(30), Primary Key(Ref_ID, Msg_ID)); 
+0

Em,你真的应该阅读关于错误处理......你是盲目的! – arkascha

+0

另外,您应该阅读“准备好的陈述”的优点以及为什么他们的用法很重要。 – arkascha

+0

嗯,我不明白这里出了什么问题。因为只有Ref_ID没有被写入数据库。 – Priyabrata

回答

1
$xx = mysqli_fetch_array($resp); 

只会返回一个数字索引数组,如$ XX [0],$ XX [1]。

要使用的列名,你需要使用:

$xx = mysqli_fetch_array($resp, MYSQLI_ASSOC); 

或者更短的版本:

$xx = mysqli_fetch_assoc($resp); 

作为一个侧面说明,别忘了安全性,插入数据时自带从函数外部,可能有一个引号或SQL,它需要逃脱!

$Heading = mysqli_real_escape_string($con, $Heading); 

否则它会回来咬你。

+0

应该提到的还有'mysqli_fetch_assoc'这是做同样事情的一种较短的方式。 – WhoIsRich