插入SQL语句所需的PHP变量

时间:2012-06-25 15:58:35

标签: php mysql sql insert

我已经尝试了几天来为我想要执行的内容获取正确的格式。

目标是将行插入先前创建的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);

我也试过这些:

Passing PHP variables into MySQL

但没有人真正将表格插入行中。

有没有人有其他方法可以做到这一点?

4 个答案:

答案 0 :(得分:1)

您需要非常简单地开始调试,并从那里开始工作。我想要的第一个猜测是你没有正确设置传递给函数的参数值。

试试这个:

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();

有关详细信息,请参阅PHP documentation on mysqli_prepare

答案 1 :(得分:0)

您的INSERT查询看起来非常接近。我相信您的问题可能源于不终止SQL语句:

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

注意额外的分号(;),关闭SQL语句。

答案 2 :(得分:0)

PHP有一个允许您将变量放入双引号字符串的功能。尝试运行查询:

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

这样做的原因是PHP解析双引号字符串以进行变量替换。

答案 3 :(得分:0)

尝试使用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注入。