【发布时间】:2018-11-14 19:28:12
【问题描述】:
Json 到 MySQL 运行时可以很好地导入数据库。 当我手动运行 SQL 查询时,它运行时没有错误。
当我通过代码运行它时,它在我的第 1 行附近的 SQL 语法中返回错误。
我已经删除了魔术引号,仍然有错误。 在我扔下毛巾之前,有人能对此有所了解吗?
我知道魔术引号已被弃用,我认为这是导致错误的原因,但这些已被删除。
<?php
/**
* Created by PhpStorm.
* User: dave
* Date: 14/11/2018
* Time: 15:26
*/
$connect = mysqli_connect("localhost", "root", "password", "clients");
$query = '';
$table_data = '';
$filename = "test.json";
$data = file_get_contents($filename);
$array = json_decode($data, true);
foreach($array as $set)
{
$tblName = $set['tableName'];
echo $tblName ;
if(sizeof($set['rows']) > 0) {
$query = '';
$colList = array();
$valList = array();
// Get list of column names
foreach($set['rows'][1] as $colname => $dataval) {
// $colList[] = "`".$colname."`";
$colList[] = $colname;
}
$query .= "INSERT INTO ".$tblName." \n";
$query .= "(".implode(", ",$colList).")\nVALUES\n";
// Go through the rows for this table.
foreach($set['rows'] as $idx => $row) {
$colDataA = array();
// Get the data values for this row.
foreach($row as $colName => $colData) {
$colDataA[] = "'".$colData."'";
}
$valList[] = "(".implode(",",$colDataA).")";
}
// Add values to the query.
$query .= implode(",\n",$valList)."\n";
echo "<p>Insert query:<pre>$query</pre></p>";
$results = mysqli_query($connect, $query);
// if ($connect->query($results) === TRUE) {
// echo "New record created successfully";
// } else {
// echo $results . "<br>" . $query . "<br>" ;
// echo "error" .$connect->error ;
// }
echo "<h1>".mysqli_num_rows($connect)." Rows appeded in $tblName</h1>";
} else {
echo "<p>No rows to insert for $tblName</p>";
}
}
Json 文件:
[
{
"tableName":"contacts",
"rows":[
{
"First_Name": "Dave",
"Last_Name": "Frank",
"Company": "Company1",
"Business_Phone": "0115 999999",
"Email_Address": "zvv@zz.com"
},
{
"First_Name": "Dave",
"Last_Name": "Blogs",
"Company": "Company2",
"Business_Phone": "0115 888888",
"Email_Address": "zvv@zz.com"
},
{
"First_Name": "David",
"Last_Name": "frank",
"Company": "Company3",
"Business_Phone": "0115 777777",
"Email_Address": "zvv@zz.com"
}
]
},
{
"tableName":"contacts_old",
"rows":[
{
"First_Name": "Dave",
"Last_Name": "Frank",
"Company": "Company1",
"Business_Phone": "0115 999999",
"Email_Address": "zvv@zz.com"
},
{
"First_Name": "Dave",
"Last_Name": "Blogs",
"Company": "Company2",
"Business_Phone": "0115 888888",
"Email_Address": "zvv@zz.com"
},
{
"First_Name": "David",
"Last_Name": "frank",
"Company": "Company3",
"Business_Phone": "0115 777777",
"Email_Address": "zvv@zz.com"
}
]
}
]
这是根据要求的回声:
contacts
Insert query:
INSERT INTO contacts
(First_Name, Last_Name, Company, Business_Phone, Email_Address)
VALUES
('Dave','Frank','Company1','0115 999999','zvv@zz.com'),
('Dave','Blogs','Company2','0115 888888','zvv@zz.com'),
('David','frank','Company3','0115 777777','zvv@zz.com')
Error: 1
INSERT INTO contacts (First_Name, Last_Name, Company, Business_Phone, Email_Address) VALUES ('Dave','Frank','Company1','0115 999999','zvv@zz.com'), ('Dave','Blogs','Company2','0115 888888','zvv@zz.com'), ('David','frank','Company3','0115 777777','zvv@zz.com')
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1' at line 1contacts_old
Insert query:
INSERT INTO contacts_old
(First_Name, Last_Name, Company, Business_Phone, Email_Address)
VALUES
('Dave','Frank','Company1','0115 999999','zvv@zz.com'),
('Dave','Blogs','Company2','0115 888888','zvv@zz.com'),
('David','frank','Company3','0115 777777','zvv@zz.com')
Error: 1
INSERT INTO contacts_old (First_Name, Last_Name, Company, Business_Phone, Email_Address) VALUES ('Dave','Frank','Company1','0115 999999','zvv@zz.com'), ('Dave','Blogs','Company2','0115 888888','zvv@zz.com'), ('David','frank','Company3','0115 777777','zvv@zz.com')
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1' at line 1
警告:mysqli_num_rows() 期望参数 1 为 mysqli_result,布尔值在
中给出【问题讨论】:
-
当你回显
$query时,你能展示一下这会产生什么吗? -
用数据编辑过的帖子
-
您执行了两次查询 -
$results = mysqli_query($connect, $query);,然后是结果if ($connect->query($results) === TRUE) { -
而
$results将被强制转换为1,因为PHP 的松散类型。也就是说,你的做法是错误的,一旦你击中 John O'Malley,一切都会崩溃。 -
我正在为你准备一个答案。简短版本:准备好的语句。