0

我真的很想解决这个问题并且惨遭失败。我想做的是根据 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";
}

?>
4

3 回答 3

1

你错过了mysql_query($sql)

if(!mysql_query($sql)){
//die(mysql_error());
}

请考虑使用参数化查询使用 PDO 或 My SQLi,因为 mysl_* 函数已贬值。

于 2013-08-11T18:33:54.180 回答
0

你的SQL全错了。您正在使用field = valuean 的语法INSERT,然后您将一个数组连接起来,就好像它是一个 string 一样($fields),并且您在值周围缺少了几个括号。

于 2013-08-11T18:48:57.310 回答
0

有几件事:我发现对于 php <-> mysql,当我遇到困难时,重要的是要查看 mysql 中发生了什么,并直接在 phpmyadmin 中使用这些查询进行实验。

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);
于 2013-08-11T18:54:54.847 回答