【发布时间】:2011-08-04 09:33:39
【问题描述】:
if ($response_array[0] == 1) {
$table = payments_received;
function mysql_insert_array($table, $response_array) {
foreach ($response_array as $field=>$value) {
$fields[] = '`' . $field . '`';
$values[] = "'" . mysql_real_escape_string($value) . "'";
}
$field_list = implode(',', $fields);
$value_list = implode(', ', $values);
$query = "INSERT INTO `" . $table . "` (" . $field_list . ") VALUES (" . $value_list . ")";
if (!$query) {
$message = mysql_error();
die($message);
}
}
include('receipt.php');
}
任何想法为什么这不起作用?我知道顶部的条件得到满足,因为脚本继续包含receipt.php(代码底部)。我知道 $response_array 也因此有数据(另外我在收据中使用了它的数据)。尽管有 $query 下的条件,但我根本没有得到任何错误输出(顺便说一下,我的 MySQL 连接信息是在脚本顶部指定的,包括处于完美工作状态的 config.inc.php)。我希望我没有遗漏一些明显的东西。
更新 #1:
正如你们中的一些人指出的那样,我实际上并没有调用 mysql_query(因为我担心我错过了一些明显的东西,这表明我的大脑没有在高水平上运作)。我接受了 Gus 的编辑并尝试了它们,修复了不平衡的大括号并添加了 mysql_query() (正如弗兰克提到的)。这是我所拥有的:
function mysql_insert_array($table, $response_array) {
foreach ($response_array as $field=>$value) {
$fields[] = '' . $field . '';
$values[] = "'" . mysql_real_escape_string($value) . "'";
}
$field_list = implode(',', $fields);
$value_list = implode(', ', $values);
$field_list = rtrim($fieldlist,",");
$value_list = rtrim($value_list,",");
$query = mysql_query("INSERT INTO `" . $table . "` (" . $field_list . ") VALUES (" . $value_list . ")");
if (!$query) {
$message = mysql_error();
die($message);
}
}
if ($response_array[0] == 1) {
$table = "payments_received";
mysql_insert_array($table, $response_array);
include('receipt.php');
} else {
include('declined.php');
}
我更进一步,至少得到一个错误代码,这是......
您的 SQL 语法有错误;查看与您的 MySQL 服务器版本相对应的手册,了解在 '0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 附近使用的正确语法, 16,17,18,19,20,21,22,23,24,25,26,27,28,29,' 在第 1 行
...我知道问题出在尾随逗号,但我今天一直遇到这个问题,还没有弄清楚如何在这种情况下摆脱那个该死的额外逗号。想法?
感谢大家迄今为止的帮助。
更新 #2
回答了我自己的问题。我使用 rtrim($field_list,",") 和 rtrim($value_list,",") 取得了成功。请参阅 UPDATE #1 中的代码更新......或者不!我刚刚意识到,当我粘贴上面的代码时,我打错了并且在一个地方忘记了 field_list 中的下划线......我将它添加回来并再次测试,它没有工作。与上述错误相同。但是,当拼写错误仍然存在时,代码可以正常工作并且完全符合我的要求。 WTF!?
最终更新
我用下面的代码做了我想做的事。我在下面代码的第 3 行的 $field 周围添加了 `(我不知道那个字符叫什么)。
function mysql_insert_array($table, $response_array) {
foreach ($response_array as $field=>$value) {
$fields[] = "$field";
$values[] = "'" . mysql_real_escape_string($value) . "'";
}
$field_list = implode(',', $fields);
$value_list = implode(', ', $values);
$field_list = rtrim($field_list,",");
echo "$field_list <br />";
$value_list = rtrim($value_list,",");
echo "$value_list <br />";
$query = mysql_query("INSERT INTO `" . $table . "` ($field_list) VALUES (" . $value_list . ")");
if (!$query) {
$message = mysql_error();
die($message);
}
}
if ($response_array[0] == 1) {
$table = "payments_received";
mysql_insert_array($table, $response_array);
include('receipt.php');
} else {
include('declined.php');
}
【问题讨论】:
-
我已经更新了我的回复。看看吧。
-
@Kerin 谢谢。我也对我的问题进行了另一次更新。
-
没有看到你的代码的其余部分,我不得不冒险猜测你删除下划线的 rtrim 函数在提供未定义的值时行为不可预测。这不是一个真正的猜测,我对此并不满意,但我会在早上再看一次。此外,我注意到在您的 implode() 函数中,您使用 ',' 作为第一个 implode 的分隔符,并使用 ', ' 作为第二个 implode 的分隔符。第三,我想补充一点,整个 rtrim 事情很奇怪且不必要,只需使用 '' 作为分隔符执行 implode(),您将获得即时连接的字符串!