【问题标题】:XML to MySQL using PHP [closed]使用 PHP 的 XML 到 MySQL [关闭]
【发布时间】:2026-02-23 10:30:02
【问题描述】:

我正在尝试从我的 XML 中获取这 4 个不同的属性并将它们转换为表格数据。我已经设置了一个循环来输入信息。但是,当我尝试运行它时,我得到一个语法错误,意外的 T_STRING。我错过了什么?

foreach ($xml->machine as $machine)
{
   "INSERT INTO 'table' (id, filePointer, amount, description) VALUES ('%s', '%s', '%s','%s')",
    mysql_real_escape_string('$machine->id'),
    mysql_real_escape_string('$machine->images->image->filePointer'),
    mysql_real_escape_string('$machine->advertised_price->amount'),
mysql_real_escape_string('$machine>description'))
}

【问题讨论】:

  • 您不需要将该字符串分配给变量吗?也许您也打算通过sprintf 运行它?
  • 您为什么要使用已弃用且很快将被完全删除的 mysql_ api 编写全新的代码?此时您应该使用 mysqli 或 pdo,在任何一种情况下,使用绑定变量都不需要转义字符串 --- 只需传递绑定变量。
  • 此外,每个答案都掩盖了“table”实际上需要是“table”这一事实,尽管没有令人信服的理由在表名中使用反引号,除非它是 mysql 关键字。

标签: php mysql xml


【解决方案1】:

让我们看看 mysqli 会是什么样子......

$db = new mysqli(hostname, username, password, database);
$stmt = $db->prepare("INSERT INTO table (id, filePointer, amount, description) VALUES (?, ?, ?, ?)");
) 
foreach ($xml->machine as $machine) {
    $stmt->bind_param('ssss', $machine->id, $machine->images->image->filePointer, $machine->advertised_price->amount, $machine->description);
    // Execute the query
    $stmt->execute();

}
$stmt->close();

【讨论】:

  • 谢谢大家。这个特别有用。但是,现在我收到此错误:调用非对象上的成员函数 bind_param()
  • 关于我的桌子是如何设置的?
  • @DNielsen:如果答案对您不起作用,请不要接受。你所做的就是复制这个问题。还要考虑如何改进你的问题。
【解决方案2】:

除了没有实际调用 mysql_query 之外,还有多个语法问题。

试试这个:

foreach ($xml->machine as $machine)
{
   $sql = sprintf("INSERT INTO 'table' (id, filePointer, amount, description) VALUES ('%s', '%s', '%s','%s')",
     mysql_real_escape_string($machine->id),
     mysql_real_escape_string($machine->images->image->filePointer),
     mysql_real_escape_string($machine->advertised_price->amount),
     mysql_real_escape_string($machine->description)
   );

   mysql_query($sql);
}

【讨论】:

    【解决方案3】:

    可能是因为您实际上并没有对该字符串执行任何操作。您只需在 PHP 代码中声明该字符串,无需分配它或将其作为查询发送。因为你想为循环的每次迭代做一个新的查询,尝试这样的事情。

    $db = new mysqli(hostname, username, password, database);
    foreach ($xml->machine as $machine)
    {
        $db->query("INSERT INTO 'table' (id, filePointer, amount, description) VALUES ('%s', '%s','%s','%s')",
        $machine->id,
        $machine->images->image->filePointer,
        $machine->advertised_price->amount,
        $machine>description);
    

    }

    【讨论】:

    • 使用 mysqli_* 的奖励积分 :)
    • 组合 mysqli_* ,参数化和使用 mysql_real_escape_string 的减分...(不,我并没有真正 -1 你。但真的,失去了 mysql_real_escape_string's)
    • 啊谢谢。我的错!固定。
    • 仍然失败...将 sprintf 与参数混合,有点违背了使用 mysqli 的准备/绑定过程的目的,但是他的代码需要它,而你在某个时候放弃了它。
    【解决方案4】:

    您错过了对 mysql_query 函数的调用以将您的 "INSERT INTO ... 内容放入。

    【讨论】:

      【解决方案5】:

      试试这个...

      foreach ($xml->machine as $machine)
      {
       mysql_query("INSERT INTO 'table' (id, filePointer, amount, description) VALUES ('%s', '%s', '%s','%s')",
      mysql_real_escape_string('$machine->id'),
      mysql_real_escape_string('$machine->images->image->filePointer'),
      mysql_real_escape_string('$machine->advertised_price->amount'),
      mysql_real_escape_string('$machine->description'));
      
      }
      

      【讨论】: