【问题标题】:How to Insert to MySQL with php and echo it如何使用 php 插入 MySQL 并回显
【发布时间】:2019-01-24 10:05:38
【问题描述】:

我真的是 PHP 新手,需要一些帮助。

我想建立一个可以上传帖子和图片的论坛。

现在,我需要有关我的代码和 MySQL 数据库之间连接的帮助。

我正在使用带有下表的 MySQL:

主表:“帖子”

  1. post_data = 这是来自用户的 POST 请求。
  2. 用户名 = 来自另一个主表:用户
  3. user_id = 来自另一个主表:用户
  4. post_id = 自动。

我想发布从用户那里获得的数据,但我真的不知道问题出在哪里。

这是 PHP 代码:

<?php

session_start();
$MySQLdb = new PDO("mysql:host=127.0.0.1;dbname=forum", "root", "");
$MySQLdb->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

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

     $post   = $_POST['msg'];

     $cursor = $MySQLdb->prepare("SELECT post_data FROM posts WHERE post=:posts_data");
     $cursor->execute( array(":post_data"=>$post) );
 }
$cursor = $MySQLdb->prepare("INSERT INTO posts (post) value (:post_data)");
$cursor->execute(array(":post_data"=>$post));?>

这是“msg”(帖子输入)的 HTML 代码:

div class="input-group">
                <input id="msg" type="text" method="POST" class="form-control" name="msg" placeholder="Write your message here...">
                <span class="input-group-addon"><button id="send_post">Send</button></span>
            </div>

这是我得到的错误:

注意:未定义变量:发布在 C:\xampp\htdocs\forum\main.php 的第 15 行

致命错误:未捕获的 PDOException:SQLSTATE[42S22]:未找到列: 1054 '字段列表'中的未知列'post' C:\xampp\htdocs\forum\main.php:15 堆栈跟踪:#0 C:\xampp\htdocs\forum\main.php(15): PDOStatement->execute(Array) #1 {main} 在第 15 行的 C:\xampp\htdocs\forum\main.php 中抛出

非常感谢。

【问题讨论】:

  • WHERE post=:posts_data 您的表描述中没有名为 post 的列。
  • 供您参考,不能"insert to phpMyAdmin",这是一个工具用来管理MySQL数据库,像 MySQL 工作台
  • 您也在查询中使用:posts_data,但在执行中使用:post_data。这将是您遇到的下一个错误。
  • 您的 $post 变量为空
  • 抱歉,您插入的是 POST 列,而不是 POST_DATA 列,它恰好是您在 POSTS TBL 中的列名

标签: php mysql sql


【解决方案1】:

第 15 行是哪几行?是$cursor = $MySQLdb-&gt;prepare("INSERT INTO posts (post) value (:post_data)");

因为如果是这样,那么您可能想找到一种设置$post 变量的方法。看看您的代码,您在 if(){} statement 内设置了 $post,因此当它尝试执行以下行时:

$cursor = $MySQLdb->prepare("INSERT INTO posts (post) value (:post_data)");
$cursor->execute(array(":post_data"=>$post));?>

您的 $post 变量为空。

【讨论】:

  • 我这样做并得到了这个错误:致命错误:未捕获的 PDOException:SQLSTATE[42S22]:未找到列:1054 C:\xampp\htdocs\ 中“字段列表”中的“字段列表”中的未知列“帖子” forum\main.php:15 堆栈跟踪:#0 C:\xampp\htdocs\forum\main.php(15): PDOStatement->execute(Array) #1 {main} 在 C:\xampp\htdocs\forum 中抛出\main.php 第 15 行
  • 如例外所说,post 列不是表格的一部分,您必须交叉检查
【解决方案2】:

你的 html 都是错误的。

        <input id="msg" type="text" method="POST" class="form-control" name="msg" placeholder="Write your message here...">

方法是表单标签上的一个属性,而不是输入。

<form action="/youraction" method="POST" />
<input id="msg" type="text" method="POST" class="form-control" name="msg" placeholder="Write your message here...">
</form>

PHP 失败,因为没有设置 $_POST['msg']

【讨论】:

    【解决方案3】:

    也许你的 html 表单的方法是 get 或 ...

    改变 $_POST['msg'];$_REQUEST['msg'];

    <?php
    
    session_start();
    $MySQLdb = new PDO("mysql:host=127.0.0.1;dbname=forum", "root", "");
    $MySQLdb->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     $post   ="";
     if(isset($_REQUEST['msg'])){
    
         $post   = $_REQUEST['msg'];
    
         $cursor = $MySQLdb->prepare("SELECT post_data FROM posts WHERE post=:posts_data");
         $cursor->execute( array(":post_data"=>$post) );
     }
    $cursor = $MySQLdb->prepare("INSERT INTO posts (post) value (:post_data)");
    $cursor->execute(array(":post_data"=>$post));?>
    

    【讨论】:

    • 我这样做并得到:致命错误:未捕获的 PDOException:SQLSTATE[42S22]:未找到列:1054 C:\xampp\htdocs\forum\ 中“字段列表”中的“字段列表”中的未知列“帖子” main.php:15 堆栈跟踪:#0 C:\xampp\htdocs\forum\main.php(15): PDOStatement->execute(Array) #1 {main} 在 C:\xampp\htdocs\forum\main 中抛出.php 在第 15 行
    【解决方案4】:

    “INSERT INTO 帖子(post)值(:post_data)”必须更改为“INSERT INTO 帖子(post_data)值(:post_data)”

    请注意,根据您的表定义和定义的约束,可能会出现新的 MySQL 错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-18
      • 2022-11-24
      • 2016-12-21
      • 2011-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多