php – 数组键作为插入的mysql列名?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 数组键作为插入的mysql列名?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3983字,纯文字阅读大概需要6分钟。
内容图文
![php – 数组键作为插入的mysql列名?](/upload/InfoBanner/zyjiaocheng/908/05f11e09d56f463398a5c99e40247fbe.jpg)
我正在使用一个将搜索结果作为json返回的API.然后,我需要将其写入MYSQL表.我以前成功完成了这个,但这次情况有所不同,我认为这是因为结果数组的结构:键名是动态的,如果没有特定键的数据,键不是在数组中列出.这是一个数组的示例vardump:
array
0 =>
array
'title' => string 'Funny but not funny' (length=19)
'body' => string 'by Daniel Doi-yesterday while eating at Curry House...
'url' => string 'http://danieldoi.com/2012/11/20/funny-but-not-funny/'
'source_site_name' => string 'WordPress.com' (length=13)
'source_site_url' => string 'http://www.wordpress.com' (length=24)
'query_topic' => string 'thanksgiving' (length=12)
'query_string' => string 'blogs=on&topic=thanksgiving&output=json' (length=39)
1 =>
array
'title' => string 'Travel Easy this Holiday Season...' (length=34)
'body' => string 'Give yourself a few gifts and get this holiday season off...
'url' => string 'http://facadebeauty.wordpress.com/2012/11/20
'date_published' => string 'Tue, 20 Nov 2012 18:22:35 +0000' (length=31)
'date_published_stamp' => string '1353435755' (length=10)
请注意密钥的顺序/包含如何变更.
我建议的解决方案是使用数组键作为列名,将它们变成一个变量以在查询语句中使用,但这对我不起作用.这是我的尝试:
$jsonString = file_get_contents("http://search-query-URL&output=json");
$array = json_decode($jsonString, true);
// database connection code snipped out here
$table = "results";
foreach($array as $arr_value) {
foreach ($arr_value as $value) {
$colName = key($arr_value);
$colValue = ($value);
$insert="INSERT INTO $table ($colName) VALUES ('$colValue')";
mysql_query($insert) OR die(mysql_error());
next($arr_value);
}
}
关于下一步要去哪里的建议?谢谢!
更新11/27:
在这里,我试图适应大卫的建议.我收到以下错误:“数据库连接错误(1110)列’标题’在查询时指定了两次.”
这是我现在的代码:
$mysqli = mysqli_connect("localhost");
mysqli_select_db($mysqli, "mydatabase");
foreach ($array as $column) {
foreach ($column as $key => $value) {
$cols[] = $key;
$vals[] = mysqli_real_escape_string($mysqli, $value);
}
}
$colnames = "`".implode("`, `", $cols)."`";
$colvals = "'".implode("', '", $vals)."'";
$mysql = mysqli_query($mysqli, "INSERT INTO $table ($colnames) VALUES ($colvals)") or die('Database Connection Error ('.mysqli_errno($mysqli).') '.mysqli_error($mysqli). " on query: INSERT INTO $table ($colnames) VALUES ($colvals)");
mysqli_close($mysqli);
if ($mysql)
return TRUE;
else return FALSE;
最后的升级 – 工作!
它正在发挥作用.这是我们得到的:
$mysqli = mysqli_connect("localhost");
mysqli_select_db($mysqli, "mydatabase");
foreach ($array as $column) {
foreach ($column as $key => $value) {
$cols[] = $key;
$vals[] = mysqli_real_escape_string($mysqli, $value);
}
$colnames = "`".implode("`, `", $cols)."`";
$colvals = "'".implode("', '", $vals)."'";
$mysql = mysqli_query($mysqli, "INSERT INTO $table ($colnames) VALUES ($colvals)") or die('Database Connection Error ('.mysqli_errno($mysqli).') '.mysqli_error($mysqli). " on query: INSERT INTO $table ($colnames) VALUES ($colvals)");
unset($cols, $vals);
}
mysqli_close($mysqli);
if ($mysql)
return TRUE;
else return FALSE;
解决方法:
我实际上只是坐在这个功能,因为我一直使用它.这样做:汇集数组中的所有关联对以插入表中,并将它们作为单个插入放入.要明确:这不是你上面所做的,因为看起来你正试图在每个插入的插入中插入每个值,这可能会给你更多的行.
function mysqli_insert($table, $assoc) {
$mysqli = mysqli_connect(PUT YOUR DB CREDENTIALS HERE);
mysqli_select_db($mysqli, DATABASE NAME HERE);
foreach ($assoc as $column => $value) {
$cols[] = $column;
$vals[] = mysqli_real_escape_string($mysqli, $value);
}
$colnames = "`".implode("`, `", $cols)."`";
$colvals = "'".implode("', '", $vals)."'";
$mysql = mysqli_query($mysqli, "INSERT INTO $table ($colnames) VALUES ($colvals)") or die('Database Connection Error ('.mysqli_errno($mysqli).') '.mysqli_error($mysqli). " on query: INSERT INTO $table ($colnames) VALUES ($colvals)");
mysqli_close($mysqli);
if ($mysql)
return TRUE;
else return FALSE;
}
正如MarcB上面所说,您的目标表可能没有结果显示的列.但我们正在清理插入(使用mysqli_real_escape_string),因此我们不应该遇到注入漏洞问题.
内容总结
以上是互联网集市为您收集整理的php – 数组键作为插入的mysql列名?全部内容,希望文章能够帮你解决php – 数组键作为插入的mysql列名?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。