【问题标题】:Getting error when I submit one row from a table to another table using php当我使用php将一行从一个表提交到另一个表时出现错误
【发布时间】:2015-12-23 15:39:11
【问题描述】:

我在一个新问题下打开了这个问题

我决定专注于使用 PDO 的解决方案而不是 mysqli go to...

INSERT row from another table using php PDO

感谢大家花时间帮我解决这个问题

------------

我有两张相同的桌子。我在第一个表中执行搜索,并使用结果中出现的每一行的提交链接回显结果。见以下代码...

echo "<div>".$results['Description']." - <a href='submit-ads-florida.php?Barcode=".$results['Barcode']."'>SUBMIT</a></div>";

“submit-ads-florida.php”的脚本如下...

<?php
include '../connect.php';

$query = "INSERT INTO adstable (Brand, Description, Price, Size, Price, Barcode) 
          SELECT Brand, Description, Price, Size, Price, Barcode FROM invtable 
          WHERE Barcode='".$mysqli->real_escape_string($_REQUEST['Barcode'])."";

$mysqli->query($query);
?>

我收到以下错误,但我不确定这意味着什么。

连接成功。
致命错误:在第 7 行的 /home/myaccount/public_html/florida-ave/submit-ads-florida.php 中的非对象上调用成员函数 real_escape_string()

我仍在学习,我正在使用我找到的示例中的脚本,因此我的解决方案可能没有使用正确的语法。任何帮助表示赞赏。

更新

我已经提出了建议的更改。我的连接脚本是...

<?php
$servername = "localhost";
$username = "name";
$password = "pass";
$db = "database";

// Create connection
$conn = new mysqli($servername, $username, $password, $db);

// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
} 
echo "Connected successfully. ";
?>

我的 submit-ads-florida.php 脚本是...

<?php
include '../connect.php';

$query = "INSERT INTO adstable (Brand, Description, Price, Size, Price, Barcode) 
          SELECT Brand, Description, Price, Size, Price, Barcode FROM invtable 
          WHERE Barcode='.$conn->real_escape_string($_REQUEST['Barcode']).'";

$conn->query($query);
?>

问题 我不再收到错误,但是,没有数据从 invtable 传递到 adstable。有什么想法吗?

【问题讨论】:

  • 你能发帖connect.php吗?
  • 条形码上缺少结束引号。 '".$mysqli-&gt;real_escape_string($_REQUEST['Barcode'])."" 应该在"" 中有一个单引号。或者可能已经在那个问题上抢了先机(起初错过了错误消息)。 $mysqli 定义在哪里?
  • 我们需要查看 connect.php 以了解 $mysqli 是否已定义,但您得到的错误是告诉我们很可能未定义或已定义但未连接。跨度>
  • 我按照 kiran 的建议使用正确的引号更新了提交脚本,但我不再收到错误消息,但数据没有被复制到 ads 表中。我的连接脚本如下...
  • 以下是我的连接脚本... connect_error) { die("Connection failed: " . $conn->connect_error); } echo "连接成功。"; ?>

标签: php mysql copy submit row


【解决方案1】:

编辑:我无法将所有这些都放在一条评论中,因此将其放在这里。

您的错误清楚地表明“$mysqli”不是对象。基本上,主要错误是 @mysqli 在任何地方都未定义。检查你是否有它在connect.php

其他

我瞎了!假设您的 connect.php 很好,因为您打印了“连接成功”。 除此之外,您最后缺少单引号,并且;一个编码建议是不要让它变得复杂,

<?php
include '../connect.php';

$barCode = $mysqli->real_escape_string($_REQUEST['Barcode']); // assign it here

$query = "INSERT INTO adstable (Brand, Description, Price, Size, Price, Barcode) 
          SELECT Brand, Description, Price, Size, Price, Barcode FROM invtable 
          WHERE Barcode='".$barCode."'";

$mysqli->query($query);
?>

注意:虽然您打印的是connection is succesfull,但您必须向我们展示您在connect.php 中编码的内容,因为我认为connect.php 的编码不正确。

OP 更改后更新:

现在很清楚为什么您会收到一个非常有意义的错误,即 $mysqli 不是对象,并且您不能在该对象上调用方法 real_escape_string()。你在connect.php中这样定义的

// Create connection
$conn = new mysqli($servername, $username, $password, $db);

但是在您的其他文件中,您开始将 $conn 解释为 $mysqli,除非您复制对 $mysqli 的引用,否则您无法做到这一点。喜欢$mysqli = $conn。 但我不鼓励这样做,您应该在整个代码中使用$mysqli 或在整个代码中使用$conn

【讨论】:

  • 这与$mysqli 的用法相同,因此应该有相同的错误。仍然不会成为对象。
  • 同意,我想再补充一点,他的 connect.php 实际上是问题
  • 以下是我的连接脚本... connect_error) { die("Connection failed: " . $conn->connect_error); } echo "连接成功。"; ?>
  • 我用正确的引号更新了提交脚本,我不再收到错误,但数据没有被复制到广告表中
  • @CliffT 更新您的问题。
【解决方案2】:

您将连接命名为 $conn,而不是 $mysqli。所以$mysqli 不是对象,$conn 是。

include '../connect.php';
$query = "INSERT INTO adstable (Brand, Description, Price, Size, Price, Barcode) 
          SELECT Brand, Description, Price, Size, Price, Barcode FROM invtable 
          WHERE Barcode='".$conn->real_escape_string($_REQUEST['Barcode'])."'";

$conn->query($query);

根据manual,我认为你是从...

$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
$city = $mysqli->real_escape_string($city);

查看如何为$mysqli 分配连接new mysqli

在你的脚本中

$conn = new mysqli($servername, $username, $password, $db);

更新:

您更新后的代码连接错误(您的第一个版本没有)。

include '../connect.php';

$query = "INSERT INTO adstable (Brand, Description, Price, Size, Price, Barcode) 
          SELECT Brand, Description, Price, Size, Price, Barcode FROM invtable 
          WHERE Barcode='".$conn->real_escape_string($_REQUEST['Barcode']). "'";

$conn->query($query);

【讨论】:

    猜你喜欢
    • 2022-12-03
    • 1970-01-01
    • 2014-11-17
    • 2019-11-23
    • 2013-03-25
    • 1970-01-01
    • 2016-03-22
    • 2012-06-09
    • 1970-01-01
    相关资源
    最近更新 更多