几天来我一直在尝试为我希望执行的内容获得正确的格式。
目标是将行插入到先前创建的 MYSQL 表中。该表可能是字符串和整数的混合,正如我们所知,MYSQL需要字符串两边的引号才能插入,而整数则不需要。因此,将某些内容插入到一个整数和两个字符串的表中的正确方法是:
insert into table values(number, "string", "string");
我希望这些值是 php 变量。但是,当我输入变量时,当我签入 MYSQL 时,代码将不再产生结果。将创建表,但它将为空。所以一定是这个说法行不通。
这是我插入它的函数的实际代码:
function insertRow($db, $new_table, $ID, $Partner, $Merchant)
$insert = "INSERT INTO ".$new_table. " VALUES (1,'Partner','Merchant')";
$q = mysqli_query($db, $insert);
它的工作原理是这样的,但每行都用 1、合作伙伴和商家填充整个表格,每次我选择多少次。
我也尝试了几种这样的变体
function insertRow($db, $new_table, $ID, $Partner, $Merchant)
$insert = "INSERT INTO ".$new_table. " VALUES(" .$ID. "," ."'$Partner'". ","."'$Merchant'".")";
$q = mysqli_query($db, $insert);
我也尝试过这些:
将PHP变量传递到MySQL中
但是没有人实际将表格插入行中。
有没有人有其他方法可以做到这一点?
您需要非常简单地开始调试,然后从那里开始工作。我的第一个猜测是你没有正确设置传递给函数的参数值。
试试这个:
function insertRow($db, $new_table, $ID, $Partner, $Merchant) {
$ID=1;
$Partner = 'Partner';
$Merchant = 'Merchant';
$insert = "INSERT INTO $new_table " .
" VALUES($ID,'$Partner','$Merchant')";
$q = mysqli_query($db, $insert);
if (!$q) die(mysqli_error($db));
}
这行得通吗?如果是这样,那么问题是您的参数值设置不正确。
请注意,我还在其中添加了一些错误报告;-)
但请注意,像这样创建 SQL 不是一个好主意。它对SQL注入是开放的。最好研究使用预准备语句:
$prep = mysqli_prepare($db, "insert into " . $new_table . " values (?,?,?)");
$prep->bind_param("iss", $ID, $Partner, $Merchant);
$prep->execute();
有关更多详细信息,请参阅 mysqli_prepare 上的 PHP 文档。
您的 INSERT 查询看起来非常接近。 我相信您的问题可能会因不终止 SQL 语句而引起:
$insert = "INSERT INTO " . $new_table .
" VALUES(" . $ID . ", '$Partner', '$Merchant');";
请注意额外的分号 (;),用于关闭 SQL 语句。
PHP 有一个功能,允许您将变量放入双引号字符串中。 尝试运行查询:
function insertRow($db, $new_table, $ID, $Partner, $Merchant)
$insert = "INSERT INTO $new_table VALUES ($ID,'$Partner','$Merchant');";
$q = mysqli_query($db, $insert);
这样做的原因是 PHP 解析双引号字符串以执行变量替换。
尝试使用 PDO 准备语句。它使参数变得简单:
function insertRow($db, $new_table, $ID, $Partner, $Merchant) {
$host = 'host';
$user = 'user';
$password = 'password';
$pdo = new PDO("mysql:host=$host;dbname=$db", $user, $password);
$sql = "INSERT INTO $new_table VALUES (:id, :partner, :merchant)";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':id', $ID);
$stmt->bindValue(':partner', $Partner);
$stmt->bindValue(':merchant', $Merchant);
$result = $stmt->execute() || die(var_dump($stmt->errorInfo()));
}
在这里,$ID、$Partner和$Merchant会自动转义,但您可能需要转义 $new_table 以避免 SQL 注入。