2016-03-20 17 views
0

Ich habe dieses PHP-Skript für die Veröffentlichung von Ankündigungen in einer Datenbank mit mySQL. Ich möchte es ändern, um PDO zu verwenden.Wie konvertiert man mySQL nach PDO

Der Code, den ich ursprünglich haben, ist hier:

<?php 
require_once"connection.php"; 
    session_start(); 

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

$userID=$_SESSION['sessionUser']; 
$idQuery=mysql_query("SELECT adminID FROM administrator WHERE username='$userID'");   
$adminID=mysql_fetch_array($idQuery);  


$genAnnouncement=$_POST['annForm']; 
$genAnnouncement=mysql_real_escape_string($genAnnouncement); 
$addGenAnnQuery="INSERT INTO generalannouncement (adminID, genAnnouncement) VALUES('$adminID[0]','$genAnnouncement')"; 
$announcementAdded=mysql_query($addGenAnnQuery); 
if(!$announcementAdded) 
{ 
    echo 'Could Not Add Announcement, Try Again Later.<br>'; 
    echo mysql_error(); 
} 
    else 
     echo 'Announcement Added Successfully.<br>'; 
     header("refresh:500;url=adminsHomepage.php"); 
     return; 
     mysql_close($con); 
} 
?> 

ich den Code PDO verwenden geändert haben, aber ich bin Fehler jetzt auf der Leitung 24 mit undefinierten Index $ adminID [0] und die Leitung 25 mit Integritätsbedingung bekommen Verletzung: 1048 Die Spalte 'adminID' darf nicht null sein. Der modifizierte Code ist wie folgt:

require_once"connection.php"; 

session_start(); 


if(isset($_POST['annForm'])) 
{ 
$userID=$_SESSION['sessionUser']; 
$idQuery= $conn->prepare("SELECT adminID FROM administrator WHERE username='$userID'"); 
$idQuery->execute(); 
$adminID= $idQuery->fetch();  

$genAnnouncement=$_POST['annForm']; 


if (isset($genAnnouncement)) 
{ 
$sql = "INSERT INTO generalannouncement (adminID, genAnnouncement) 
      VALUES (:adminID, :genAnnouncement)"; 
$stmt = $conn->prepare($sql); 
$stmt->execute(array(
    ':adminID' => $_POST['$adminID[0]'], 
    ':genAnnouncement' => $_POST['annForm'])); 

echo 'Announcement Added Successfully.<br>'; 
header("refresh:500; url= adminsHomepage.php"); 
return; 
}} 
+0

Warum Sie haben '$ adminID [0]' in Ihrem ursprünglichen Code, aber wickeln Sie es dann in '$ _POST' ->' $ _POST ['$ adminID [0]'] 'in Ihrem neuen Code ein? – Sean

+0

Es sollte nur ': adminID '=> $ adminID [0] sein,' ohne $ _POST [' '/' '] ' – Sean

+0

@Sean Ich hatte $ adminID [0] weil das der Wert der ID von war der aktuelle Benutzer angemeldet – user3531869

Antwort

3

In Ihrer ursprünglichen mysql_ Abfrage Sie haben:

$addGenAnnQuery = " 
     INSERT INTO generalannouncement 
        (adminID, genAnnouncement) 
      VALUES ('$adminID[0]','$genAnnouncement') 
"; 

Also, wenn Sie Ihre alten Abfrage Arbeit, neue execute dies sein muss:

$stmt->execute(array(
    ':adminID' => $adminID[0], 
    ':genAnnouncement' => $genAnnouncement)); 
+0

danke. Das funktioniert jetzt korrekt – user3531869

2

Ich glaube, Sie haben ein Problem hier: $_POST['$adminID[0]'] Versuchen Sie einfach, Apostrophe zu löschen.

+0

Danke. Ich habe die Apostrophe entfernt, aber jetzt sagt es "Undefined index: Adm101" in derselben Zeile und ein Fehler in der Zeile darunter besagt, dass admin id nicht null sein darf, Integritätsbedingung – user3531869

+0

Es sind nicht nur die Apostrophe, die gelöscht werden müssen , aber das gesamte '$ _POST [''/'']', das '$ adminID [0]' einpackt. – Sean