我真的试图绕过这个并且悲惨地失败。我想要做的是根据URL传递的URL参数构建MySQL查询。我正在尝试创建一个可重用的动态脚本,它可以根据URL参数执行它需要做的事情。
这就是我所提出的,它看起来它应该做它应该做的事情(没有错误或任何东西)但实际上没有插入数据库。我知道某个地方我犯了一个愚蠢的错误(或者想出了一些错误的错误)所以希望你们其中一个人可以指出我正确的方向。
谢谢!
//List all possible variables you can expect the script to receive.
$expectedVars = array('name', 'email', 'score', 'age', 'date');
// This is used for the second part of the query (WHERE, VALUES, ETC)
$fields = array('uName','uEmail','uScore','uAge','uDate');
// Make sure some fields are actually populated....
foreach ($expectedVars as $Var)
{
if (!empty($_GET[$Var]))
{
$fields[] = sprintf("'%s' = '%s'", $Var, mysql_real_escape_string($_GET[$Var]));
}
}
if (count($fields) > 0)
{
// Construct the WHERE Clause
$whereClause = "VALUES " . implode(",",$fields);
//Create the SQL query itself
$sql = ("INSERT INTO $mysql_table ($fields) . $whereClause ");
echo "1"; //It worked
mysql_close($con);
}
else
{
// Return 0 if query failed.
echo "0";
}
?>
答案 0 :(得分:1)
您错过了mysql_query($sql)
:
if(!mysql_query($sql)){
//die(mysql_error());
}
请考虑使用参数化查询来使用PDO或My SQLi,因为mysl_ *函数已折旧。
答案 1 :(得分:0)
你的SQL都错了。您正在使用field = value
的{{1}}语法,然后您将数组连接成一个字符串INSERT
,并且您错过了值周围的几个括号
答案 2 :(得分:0)
一些事情:我发现了php< - > mysql很重要,当我遇到困境时,看看phpmyadmin中那些查询直接进入mysql和体验是很重要的。
1 - 在我的代码中,当查询失败或设置了调试标志时,我输出mysql_error()。这通常以一种可以指向错误字段名称等的方式解释sql问题......
2 - 这样我可以直接将这个mysql查询提供给phpmyadmin并调整它,直到它给我我想要的结果。 (虽然我在那里,我也可以使用解释,看看我是否需要优化表格)
代码中的细节。与C语言不同,sprintf是隐含的。这是我写代码的方式:
// List all possible variables you can expect the script to receive.
$expectedvars = array('name', 'email', 'score', 'age', 'date');
// This is used for the second part of the query (WHERE, VALUES, ETC)
// $fields = array('uName','uEmail','uScore','uAge','uDate');
$fields = array();
// Set only the variables that were populated ...
foreach ($expectedvars as $var) {
if (!empty($_GET[$var])) {
$name = "u" + ucwords($var); // convert var into mysql field names
$fields[] = "{$name} = " . mysql_real_escape_string($_GET[$var]);
}
}
// only set those fields which are passed in, let the rest use the mysql default
if (count($fields) > 0) {
// Create the SQL query itself
$sql = "INSERT INTO {$mysql_table} SET " . implode("," , $fields);
$ret = mysql_query($sql);
if (!$ret) {
var_dump('query_failed: ', $sql, $ret);
echo "0"; // Query failed
} else {
echo "1"; // It worked
}
} else {
// Return 0 if nothing to do
echo "0";
}
mysql_close($con);