Php 如何将mySQL转换为PDO
我有一个php脚本,用于使用mySQL将公告发布到数据库。我想把它改成使用PDO 我最初使用的代码如下:Php 如何将mySQL转换为PDO,php,mysql,pdo,Php,Mysql,Pdo,我有一个php脚本,用于使用mySQL将公告发布到数据库。我想把它改成使用PDO 我最初使用的代码如下: <?php require_once"connection.php"; session_start(); if(isset($_POST['annForm'])) { $userID=$_SESSION['sessionUser']; $idQuery=mysql_query("SELECT adminID FROM administrator WHERE usernam
<?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行(完整性约束冲突):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;
}}
require_once“connection.php”;
会话_start();
如果(isset($_POST['annForm']))
{
$userID=$\会话['sessionUser'];
$idQuery=$conn->prepare(“从管理员中选择adminID,其中用户名='$userID'”);
$idQuery->execute();
$adminID=$idQuery->fetch();
$genAnnouncement=$_POST['annForm'];
如果(isset($GENANNOUNCE))
{
$sql=“插入到一般通知中(adminID、GenanNotification)
值(:adminID,:genAnnouncement)”;
$stmt=$conn->prepare($sql);
$stmt->execute(数组)(
“:adminID'=>$\u POST['$adminID[0]'”,
“:genAnnouncement'=>$_POST['annForm']);
echo“已成功添加公告。
”;
标题(“refresh:500;url=adminsHomepage.php”);
返回;
}}
我想,您在这里遇到了问题:$\u POST['$adminID[0]']
请尝试删除撇号。我想您在这里遇到了问题:
$\u POST['$adminID[0]]]
请尝试删除撇号。在原始MySQL查询中,您有:
$addGenAnnQuery = "
INSERT INTO generalannouncement
(adminID, genAnnouncement)
VALUES ('$adminID[0]','$genAnnouncement')
";
因此,如果旧的查询工作,那么新的execute
必须是:
$stmt->execute(array(
':adminID' => $adminID[0],
':genAnnouncement' => $genAnnouncement));
在原始的MySQL_uu查询中,您有:
$addGenAnnQuery = "
INSERT INTO generalannouncement
(adminID, genAnnouncement)
VALUES ('$adminID[0]','$genAnnouncement')
";
因此,如果旧的查询工作,那么新的execute
必须是:
$stmt->execute(array(
':adminID' => $adminID[0],
':genAnnouncement' => $genAnnouncement));
为什么您在原始代码中有
$adminID[0]
,但在新代码中用$\u POST
->$\u POST['$adminID[0]]]
包装它?它应该是:adminID'=>$adminID[0],
而不带$\u POST['
/'.\Sean我有$adminID[0]因为这是当前登录用户的ID值,$adminID[0]
是正确的。那么,为什么要在新代码中将其更改为$\u POST['$adminID[0]]]
?没有意义。@Sean我不太清楚为什么我在新代码中将其更改为$\u POST
为什么您的原始代码中有$adminID[0]
,但在新代码中用$\u POST
->$\u POST['$adminID[0]]
包装它?它应该是:adminID'=>$adminID[0],
,而不带$\u POST['
]@Sean我有$adminID[0],因为这是当前登录用户的ID值,$adminID[0]
是正确的。那么,为什么要在新代码中将其更改为$\u POST['$adminID[0]]]
?没有道理。@Sean我不太清楚为什么我在新代码中将它改为$\u POST谢谢。我已经删除了撇号,但现在它在同一行上写着“Undefined index:Adm101”,下面的一行中有一个错误,它说管理员id不能为空,完整性约束。这不仅仅是需要删除的撇号,而是整个$\u POST['
/']
包装的$adminID[0]
。谢谢。我已经删除了撇号,但现在它在同一行上写着“Undefined index:Adm101”,下面的一行中出现了一个错误,它说管理员id不能为空,完整性约束它不仅仅是需要删除的撇号,而是整个$\u POST['
/']
包装的$adminID[0]
。