gpt4 book ai didi

php - 数组键作为用于插入的 mysql 列名?

转载 作者:可可西里 更新时间:2023-11-01 07:28:16 27 4
gpt4 key购买 nike

我正在使用一个以 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 日更新:

我在这里尝试采纳 David 的建议。我收到以下错误:“数据库连接错误 (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),所以我们不应该有注入(inject)漏洞的问题。

关于php - 数组键作为用于插入的 mysql 列名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13479874/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com