使用PHP将XML转换为MySQL
我试图从XML中获取这4个不同的属性,并将它们转换为表数据。我已经建立了一个循环来输入信息。但是,当我尝试运行这个程序时,我得到了一个语法错误,意外的T_字符串。我错过了什么使用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
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()“关于我的桌子是如何设置的?”如果你的答案对你不起作用,不要接受它。你所做的就是复制这个问题。也考虑你如何改进你的问题。