我在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?
答案 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文档。在您的示例中,您使用单引号含义的双引号。使用双引号,您可以将变量直接放入其中。所以我把它改成了单引号。
$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')";