2016-03-20 4 views
0

У меня есть этот скрипт php для размещения объявлений в базе данных с использованием mySQL. Я бы хотел изменить его, чтобы использовать PDO.Как преобразовать mySQL в PDO

код у меня изначально здесь:

<?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); 
} 
?> 

Я изменил код, чтобы использовать PDO, но я получаю ошибки в настоящее время на линии 24 с неопределенным индексом $ adminID [0] и линии 25 с Integrity ограничением нарушение: 1048 Столбец «adminID» не может быть нулевым. Модифицированный код выглядит следующим образом:

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

Почему вы должны '$ adminID [0]' в исходном коде, но затем оберните его в '$ _POST' ->' $ _POST ['$ adminID [0]'] 'в новом коде? – Sean

+0

Это должно быть просто ': adminID '=> $ adminID [0],' без '$ _POST [''/'']' – Sean

+0

@Sean У меня был $ adminID [0], потому что это была идентификация идентификатора текущий пользователь, зарегистрированный в – user3531869

ответ

3

В оригинальном mysql_ запрос у вас есть:

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

Так что, если ваша старой работа запроса, новый execute должен быть таким:

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

спасибо. Это верно работает сейчас – user3531869

2

Я думаю, у вас есть проблемы здесь: $_POST['$adminID[0]'] Просто попробуйте удалить апостроф.

+0

Спасибо. Я удалил апострофы, но теперь он говорит «Неопределенный индекс: Adm101» в этой же строке и ошибка в строке ниже него, говоря, что идентификатор администратора не может быть пустым, ограничение целостности – user3531869

+0

Это не просто апострофы, которые необходимо удалить , но весь '$ _POST [''/'']', который обертывает '$ adminID [0]'. – Sean

Смежные вопросы