试图在MySQL语法中重复字符串,得到语法错误

时间:2016-08-26 12:56:53

标签: php mysql

我的语法有一个小问题,我正在尝试完成一个项目,我有一个小问题。

<?php
include('includes/db_credentials.php');

// connection
$conn = new mysqli($servername, $username, $password, $dbname);

// connection chck
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// Check strings for strings
$primary_name = mysqli_real_escape_string($conn, $_POST['primary_name']);
$primary_mobile = mysqli_real_escape_string($conn, $_POST['primary_mobile']);
$primary_country = mysqli_real_escape_string($conn, $_POST['primary_country']);
$primary_state = mysqli_real_escape_string($conn, $_POST['primary_state']);



$rand = rand(1,999999999);
$times = 2;
$rpt =  str_repeat("('$primary_name', '$primary_mobile', '$primary_country', '$primary_state', '$rand;'), ", $times);




$sql = "INSERT INTO cards (primary_name, primary_mobile, primary_country, primary_state, card_code)
VALUES $rpt";




if ($conn->query($sql) === TRUE) {
    echo "New record created successfully";
    $id = mysqli_insert_id();
    echo $id;
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}






$conn->close();
?> 
  

错误:INSERT INTO卡(primary_name,primary_mobile,primary_country,primary_state,card_code)值(&#39; John Doe&#39;,&#39; 000 000 0000&#39;,&#39;阿富汗&#39; ,&#39; Badghis&#39;,#23; 23605621;&#39;),(&#39; John Doe&#39;,&#39; 000 000 0000&#39;,&#39;阿富汗和# 39;,&#39; Badghis&#39;,&#39; 23605621;&#39;),   您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以获得在&#39;&#39;附近使用的正确语法。在第2行

我收到以下MySQL返回消息,我一直在这里读取stackoverflow上一次插入多行的方法,这是我可以得到的最接近的,有人能给我一个轻微的指针在哪里我做错了或者指出了我更好的方向。 感谢。

2 个答案:

答案 0 :(得分:1)

您的值后面还有一个额外的逗号。我建议改为array_fill,然后imploding

 $rpt =  array_fill(0,$times,"('$primary_name', '$primary_mobile', '$primary_country', '$primary_state', '$rand') ");
 $values = implode(',',$rpt);

答案 1 :(得分:1)

当你不需要逗号的时候,你可能会遇到一个问题,即最后一个重复插入的结尾也有一个逗号。在$ rand之后还有一个分号(假设是在那里吗?)

快速修复 我已经从你的字符串末尾取出了空格然后我只修剪了最后一个字符串中的最后一个逗号。这使您的代码几乎保持不变。

$rpt = str_repeat("('$primary_name', '$primary_mobile', '$primary_country', '$primary_state', '$rand;'),",$times);
$rpt = rtrim($rpt,",");