2017-03-03 95 views
1

嘿家伙即时尝试从(甲骨文)fetch_array传递一些数据到一个变量数组,然后使用该数组数据来检查数据是否存在于MySQL数据库并创建任何目前不存在的行..这就是我迄今为止。从数组中的数据创建新的数据库行?

问题是它的唯一检查/创建数组1条目并且不检查/创建整个数组数据。我想我会需要使用一个for循环来处理所有的阵列数据同时

<?php 




$conn = oci_connect('asdsdfsf'); 
$req_number = array(); 

if (!$conn) { 
    $e = oci_error(); 
    trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR); 
} 

$stid = oci_parse($conn, " SELECT WR.REQST_NO       
          FROM DEE_PRD.WORK_REQST WR      
          WHERE WR.WORK_REQST_STATUS_CD = 'PLAN' AND WR.DEPT_CD ='ISNG'  

          "); 
oci_execute($stid); 



while (($row = oci_fetch_array($stid, OCI_BOTH+OCI_RETURN_NULLS)) != false) { 
    // Use the uppercase column names for the associative array indices 

     $req_number[]= $row['REQST_NO']; 


} 


oci_free_statement($stid); 
oci_close($conn); 


//MYSQL 
//Connection Variables 
//connect to MYSQL 

$con = mysqli_connect($servername,$username,$password,$dbname); 
if (!$con) 
    { 
    die('Could not connect: ' . mysqli_error()); 
    } 
     // lets check if this site already exists in DB 
     $result = mysqli_query($con," 

           SELECT EXISTS(SELECT 1 FROM wr_info WHERE REQST_NO = '$req_number') AS mycheck; 

           "); 

     while($row = mysqli_fetch_array($result)) 
      { 
        if ($row['mycheck'] == "0") // IF site doesnt exists lets add it to the MYSQL DB 
        { 
         $sql = "INSERT INTO wr_info (REQST_NO)VALUES ('$req_number[0]')"; 

         if (mysqli_query($con, $sql)) { 
          $created = $req_number." Site Created Successfully"; 
         } else { 
          echo "Error: " . $sql . "<br>" . mysqli_error($con); 
         } 
        }else{ // if site is there lets get some variables if they are present... 

          $result = mysqli_query($con," 
                  SELECT * 
                  FROM wr_info 
                  WHERE REQST_NO = '$req_number[0]' 
                 "); 

          while($row = mysqli_fetch_array($result)) 
          { 

         $do some stuff 

          } 

         } 
      } 
mysqli_close($con); 

?> 
+0

你忘了描述这个问题。 – David

+0

好点*编辑 – DJRCB

回答

0

您创建一个数组:

$req_number = array(); 

环比记录值分配给数组:

while (($row = oci_fetch_array($stid, OCI_BOTH+OCI_RETURN_NULLS)) != false) { 
    $req_number[]= $row['REQST_NO']; 
} 

但是,然后永远不会循环该数组。相反,你只引用第一个记录数组中:

$sql = "INSERT INTO wr_info (REQST_NO)VALUES ('$req_number[0]')"; 
// etc. 

注:有数组中的元素,而不是一两个,你直接引用数组本身($req_number地方)( $req_number[0]),这很可能是一个错误,您需要更正这些错误另请参见:您应该使用查询参数和预准备语句习惯于通过连接值构建SQL代码是一种等待发生的SQL注入漏洞)

而不是仅仅引用第一个值在数组中,遍历数组。类似这样的:

for($i = 0; $i < count($req_number); $i++) { 

    // The code which uses $req_number, but 
    // referencing each value: $req_number[$i] 

} 
+0

感谢您的帮助!你可以详细说明一下:“你应该使用查询参数和准备好的语句,像这样连接值来构建SQL代码是一个等待发生的SQL注入漏洞” – DJRCB

+0

@DJRCB:这些是开始的好地方: http://php.net/manual/en/security.database.sql-injection.php http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php – David