Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP将XML转换为MySQL_Php_Mysql_Xml - Fatal编程技术网

使用PHP将XML转换为MySQL

使用PHP将XML转换为MySQL,php,mysql,xml,Php,Mysql,Xml,我试图从XML中获取这4个不同的属性,并将它们转换为表数据。我已经建立了一个循环来输入信息。但是,当我尝试运行这个程序时,我得到了一个语法错误,意外的T_字符串。我错过了什么 foreach ($xml->machine as $machine) { "INSERT INTO 'table' (id, filePointer, amount, description) VALUES ('%s', '%s', '%s','%s')", mysql_real_escape_str

我试图从XML中获取这4个不同的属性,并将它们转换为表数据。我已经建立了一个循环来输入信息。但是,当我尝试运行这个程序时,我得到了一个语法错误,意外的T_字符串。我错过了什么

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'))
}

您缺少对
mysql\u query
函数的调用,该函数用于将您的
插入到…
中。

除了没有实际调用mysql\u 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);
}
试试这个

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'));

}

可能是因为您实际上没有对该字符串执行任何操作。您只是在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会是什么样子

$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();

你不需要把这个字符串分配给一个变量吗?也许你也想通过
sprintf
来运行它?为什么你要用不推荐的、很快就会被完全删除的mysql\uAPI来编写全新的代码?此时你应该使用mysqli或pdo,在任何一种情况下,对于绑定变量,你都不需要转义字符串st传递绑定变量。此外,每个答案都掩盖了一个事实,即“table”实际上需要是“table”,尽管没有令人信服的理由在表名中使用backtics,除非它是mysql关键字。使用mysqli_*的好处是:)结合mysqli_*、参数化和使用mysql_real_escape_strin的减分g、 ..(不,我不是真的-1你。但是真的,失去了mysql\u real\u escape\u字符串)啊,谢谢。我的错误!修复了。仍然是一个失败…将sprintf与params混合,有点违背了使用mysqli的prepare/bind过程的目的,但是他的代码需要它,您在某个时候放弃了它。谢谢大家。这一个特别有用。但是,现在我得到了这个错误:调用成员函数bind_param()“关于我的桌子是如何设置的?”如果你的答案对你不起作用,不要接受它。你所做的就是复制这个问题。也考虑你如何改进你的问题。