从URL参数创建动态MySQL查询

时间:2013-08-11 18:31:24

标签: php

我真的试图绕过这个并且悲惨地失败。我想要做的是根据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";
}

?>

3 个答案:

答案 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);