【问题标题】:Passing multiple values from a PHP URL to a single row in a SQL table将 PHP URL 中的多个值传递到 SQL 表中的单行
【发布时间】:2013-04-04 19:27:26
【问题描述】:

我正在尝试使用 Get 语句从 PHP URL 传递多个值。我觉得应该很简单。我已经成功地传递了一个变量,但由于某种原因,第二个变量总是最终为 NULL。

这是我的代码:

<?php

$DB_HostName = "localhost";
$DB_Name = "prototype3DB";
$DB_User = "root";
$DB_Pass = "root";
$DB_Table = "sqlTable";


if (isset ($_GET["date"]))
$date = $_GET["date"];
else
$date = "null";

    if (isset ($_GET["fname"]))
    $fname = $_GET["fname"];
    else
    $fname = "null";


    $con = mysql_connect($DB_HostName,$DB_User,$DB_Pass) or die(mysql_error()); 
    mysql_select_db($DB_Name,$con) or die(mysql_error()); 


    $sql = "insert into $DB_Table (date, fname) values ('$date','$fname')";

    $res = mysql_query($sql,$con) or die(mysql_error());

    mysql_close($con);
    if ($res) {
        echo "success";
    }else{
        echo "failed";
    }// end else
?>

日期变量总是被传递给数据库,但 fname 是最终为 NULL 的变量。 我有点感觉这是语法问题,但我对 PHP 还是很陌生。

基本上,我认为这行是问题所在:

$sql = "insert into $DB_Table (date, fname) values ('$date','$fname')";

感谢您的帮助。

谢谢。

【问题讨论】:

  • 旁注:我真的希望您不要在应用程序中使用 root 用户。再加上你的 SQL 注入漏洞,你就完蛋了。
  • 运行print_r($_GET) 以确保您正确传递它...它应该为您提供$_GET 值的数组。
  • 向我们展示您尝试传递给它的连接字符串?减去域名,当然。
  • 请不要使用mysql_*函数。使用 PDO 或 MySQLi

标签: php sql get


【解决方案1】:

试试这个...

$sql = "insert into $DB_Table (date, fname) values ('$date','".$fname."')";

有时这些额外的引号可以解决问题...大声笑

但 Colin 也是对的……这里的漏洞非常明显。希望你只是在测试东西.. :)

【讨论】:

  • 感谢这个工作,是的,这只是通过本地主机运行到本地数据库进行演示。
【解决方案2】:

请使用 PDO 或 MySQLi 而不是 mysql_* 函数。我喜欢 PDO,可以在这里找到有用的信息:http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developershttp://us.php.net/manual/en/pdostatement.bindvalue.php

要快速入门,请检查以下代码:

<?php

// Credentials. DSN is a string defining how to connect to the DB
$DB_DSN    = "mysql:dbname=myDatabase;host=127.0.0.1";
$DB_USER   = "myUser";
$DB_PASSWD = "myPassword";

// Make the connection and get a handle for talking to the db
$db = new PDO($DB_DSN, $DB_USER, $DB_PASSWD);

// Make query into a prepared statement. Protects us from SQL injection.
// Use placeholders like :status and :id where we will be inserting variables
$statement = $db->prepare('
    UPDATE users
    SET status = :status
    WHERE id = :id ');

// Associate vars with the placeholders in our query
// Define the type of valus such as string or int with the third param
$statement->bindValue(':id',     $_GET['id'],     PDO::PARAM_INT);
$statement->bindValue(':status', $_GET['status'], PDO::PARAM_STR);

// Actually run the query
$statement->execute();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 2014-01-17
    • 2012-05-29
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    相关资源
    最近更新 更多