将PHP变量传递给MySQL

时间:2012-06-22 19:46:28

标签: php mysql variables

我在PHP中有一个函数,它将值插入MYSQL表。

function insertRow($db, $new_table, $ID, $Partner, $Merchant)
{
    $insert = "INSERT INTO " .$new_table. " VALUES(number, "string", "string")"
    $q = mysqli_query($db, $insert);
}

我正在努力定制VALUES部分。我需要数字,字符串和字符串分别来自PHP的ID,Partner和Merchant变量。

我试过

function insertRow($db, $new_table, $ID, $Partner, $Merchant)
{
    $insert = "INSERT INTO " .$new_table. " VALUES(" .$ID . $Partner . $Merchant . ")";
    $q = mysqli_query($db, $insert);
}

也是。但它似乎不起作用,因为对于SQL,字符串值必须用引号括起来。但是,如果我更改代码,以便它。“$ ID”。 “$ Partner”。 “$ Merchant”。 “)”;因此变量根据需要在引号中,它们不再是PHP变量。如何让我的PHP变量包含在引号中,以便我可以正确执行SQL?

7 个答案:

答案 0 :(得分:4)

使用串联的其他答案很简单。最好的方法是使用预准备语句,这将使您的代码更加安全。

$insert = "INSERT INTO " .$new_table. " VALUES(?, ?, ?)";
$q = mysqli_prepare($db, $insert);
mysqli_stmt_bind_param($q, "iss", $ID, $Partner, $Merchant);
mysqli_stmt_execute($q);

执行参数化查询意味着您的查询和数据将单独发送。这意味着查询的结构已经存在,因此不能被插入数据中的任何其他内容更改,这意味着您可以安全地进行SQL注入。

参见PHP手册:

答案 1 :(得分:1)

嗯,有很多方法可以做到这一点:

字符串连接

请注意数据库除外的数据类型。在你的问题中,你错过了逗号分隔值:

$insert = 'INSERT INTO ' . $new_table . ' VALUES(' . $ID . ', \'' . $Partner . '\', \'' . $Merchant '\')';

有很多方法可以修改字符串连接示例。考虑关于单引号和双引号的php文档。在您的示例中,您使用单引号含义的双引号。使用双引号,您可以将变量直接放入其中。所以我把它改成了单引号。

的sprintf

$insert = sprintf('INSERT INTO %s VALUES(%s, \'%s\', \'%s\');', $new_table, $ID, $Partner, $Merchant);

请参阅文档以获取有关此便捷功能的更多信息:http://www.php.net/sprintf

准备好的陈述

由于SQL Injection,我建议您使用此方法。在上面的示例中,您需要注意字符串转义。可以使用mysql_real_escape。但它可能不适用于所有情况。

所以,准备好的陈述要好得多:

$insert = 'INSERT INTO ' .$new_table. ' VALUES(?, ?, ?)';
$q = mysqli_prepare($db, $insert);
mysqli_stmt_bind_param($q, "iss", $ID, $Partner, $Merchant);
mysqli_stmt_execute($q);

PS:使用面向对象的方式对于准备好的语句也会更好,因为你有更多机会这样做。请参阅MySQLi班级样式和PDO

的文档

答案 2 :(得分:0)

级联

$insert = "INSERT INTO " .$new_table. " VALUES(".$ID.", '".$Partner."', "."'"$Merchant"')";

答案 3 :(得分:0)

试试这个:

function insertRow($db, $new_table, $ID, $Partner, $Merchant)
{
    $insert = "INSERT INTO " .$new_table. " VALUES( '" .$ID."','" . $Partner."','". $Merchant . "')";
    $q = mysqli_query($db, $insert);
}

或者您可以使用

function insertRow($db, $new_table, $ID, $Partner, $Merchant)
{
    $insert = "INSERT INTO " .$new_table. " VALUES( '$ID','$Partner','$Merchant')";
    $q = mysqli_query($db, $insert);
}

答案 4 :(得分:0)

嗯......这是一个查询对于它只是一个像任何其他字符串的事实没有区别。您完全有能力添加$new_table值,那么是什么阻止您做其他人?

$insert = "INSERT INTO ".$new_table." VALUES (".$ID.", '".$Partner."', '".$Merchant.")";

这假设您已经采取了必要的步骤来清理值。

答案 5 :(得分:0)

试试这个:

$insert = "INSERT INTO $new_table VALUES(number, '{$string}', '{$string}')";

答案 6 :(得分:0)

$insert = "INSERT INTO $new_table VALUES($ID,'$Partner','$Merchant')";