无法将数据写入sql表,

时间:2013-01-09 22:53:13

标签: php mysql sql database pdo

我正在尝试使用PHP从我的网站将一些信息写入SQL数据库。我可以访问数据库进行登录,但是我无法从我的网站上写任何内容。此外,我无法查看任何连接错误。

表单页面:

<?php
    $dbh = new PDO('mysql:host='.$hostname.';dbname='.$dbname, $user, $pass);

if (!$dbh)  {  die('Could not connect: ' . mysql_error());  }else echo 'connected';echo '<br>';
if(isset($_COOKIE['username'])) 
?>  
        <div id="imagel">
        <img class="imagel" src="../images/logos/logo2.jpg" width="300" height="300" alt="studio table" />
        </div>
        <div id="textr">

        <form name="tableofevents" method="post" action="adminhome.php">
        Name of Event(Maximum of 83 characters): <input type="text" name="noe"/>
        <br>
        Event Description (Maximum of 288 characters): <input type="text" name="eventdescription"/>
        <br>
        Date of Event: <input type="text" name="date"/>
        <br>
        Ticket Price: <input type="text" name="price"/>
        <br>
        <input type="submit" name="submit" text="submit"/>
        </form>

处理页面:

<?php

$hostname = 'localhost';
$user='******';
$pass='***********';  
$dbname='sth420';
$handler = new PDO('mysql:host='.$hostname.';dbname='.$dbname,$user,$pass);

$dbh = mysql_connect ($hostname.';dbname='.$dbname, $user, $pass);

if (!$dbh)  {  die('Could not connect: ' . mysql_error());  }
else echo 'connected';echo '<br>';


if(isset($_COOKIE['username'])) 
{
    $username=$_COOKIE['username'];
    $password=$_COOKIE['password'];

    $sql='SELECT * FROM Users WHERE ID=:id';   
    $results = $handler->prepare($sql);
    $results->execute([':id' => $username]);
    $row = $results->fetch();
    if($row!=null)



    {
        $pword = $row['Password'];
        if($pword == $password)
        {
            if(isset($_POST['submit']))
            {
                $noe=$_POST['noe'];
                $ed=$_POST['eventdescription'];
                $date=$_POST['date'];
                $price=$_POST['price'];



                    $sql='INSERT INTO ismievents ( title, evtdesc, dandt, price ) VALUES(0, :noe, :eventdescription, :date, :price)';
                    mysql_error()
                    $results = $handler->prepare($sql);
                    $results->execute([':noe' => $noe, ':eventdescription' => $ed, ':date' => $date, ':price' => $price]);
                    $handler = null;
                    header('Location: events.html');


            }
        }
    }
}
if (!mysql_query($sql,$dbh))
  {
  die('Error: ' . mysql_error());
  }
echo "1 record added";

mysql_close($dbh);
require_once('adminhome.html');

?>

1 个答案:

答案 0 :(得分:3)

您正在混合PDO和mysql_connect()。这是无效的,因为它们是不兼容的API。删除对mysql_*()的所有引用,并仅使用您的PDO语句。您基本上复制了每个PDO语句,但对mysql_query()的调用不正确,但您应该没有mysql_connect(), mysql_query(), mysql_error(), mysql_fetch_*()

请参阅the manual on PDO prepared statements以查看许多示例。

我发现这里的列数不匹配。您列出了4列,但VALUES ()列表包含5列:

// Prepared statemetn looks ok...
$sql='INSERT INTO ismievents ( title, evtdesc, dandt, price ) VALUES(0, :noe, :eventdescription, :date, :price)';
// But this is meaningless here...
mysql_error()

我还注意到您使用的是PHP 5.4数组文字,如:

$results->execute([':noe' => $noe, ':eventdescription' => $ed, ':date' => $date, ':price' => $price]);

希望您实际上是在PHP 5.4中运行此代码。

实际上,您需要将此代码带回绘图板以清除PDO与mysql_*()之间的不兼容性。之后,您将能够利用它缩小其他问题。

最后需要注意的是,确实不建议在$_COOKIE中存储密码。成功登录后,将登录状态存储在$_SESSION中。