2017-03-03 4 views
1

Hey Leute ich versuche, einige Daten von einem (Oracle) fetch_array zu einem Variablen-Array zu übergeben und dann diese Array-Daten zu verwenden, um zu überprüfen, ob die Daten auf einer MySQL-Datenbank vorhanden sind und irgendwelche Zeilen erstellen, die derzeit nicht existieren habe bis jetzt.Erstellen neuer db Zeilen aus Daten in Array?

Das Problem ist, es ist nur überprüft/erstellt 1 Eintrag des Arrays und überprüft/erstellt nicht die gesamten Array-Daten. Ich glaube, ich müsste eine for-Schleife verwenden, um alle Arraydaten

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

Sie vergaß, das Problem zu beschreiben. – David

+0

good point * bearbeitet – DJRCB

Antwort

0

Sie erstellen ein Array gleichzeitig zu verarbeiten:

$req_number = array(); 

Und Schleife über Datensätze Werte in das Array zuweisen:

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

Aber dann nie Schleife über dieses Array. Stattdessen sind Sie nur Verweis auf die erste Datensatz im Array:

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

(Hinweis: Es gibt ein paar Orte, wo man direkt die Array-Referenz selbst ($req_number) anstelle des Elements in dem Array (Auch: Sie sollten Abfrageparameter und vorbereitete Anweisungen verwenden.Einleiten von SQL-Code aus Verkettung von Werten wie diese ist eine SQL-Injektion Schwachstelle warten auf passieren .)

Anstatt nur den ersten Wert zu referenzieren im Array, Schleife über das Array. Etwas wie dieses:

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

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

} 
+0

danke für die Hilfe! Könnten Sie mehr davon ausarbeiten? Sie sollten Abfrageparameter und vorbereitete Anweisungen verwenden. Sich an das Erstellen von SQL-Code aus Verkettungswerten zu gewöhnen, ist eine Sicherheitslücke, die auf SQL injiziert. – DJRCB

+0

@DJRCB: Das sind gute Orte, um damit zu beginnen: http://php.net/manual/en/security.database.sql-injection.php http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php – David

Verwandte Themen