使用php创建表并插入数据

jv4diomz  于 2024-01-05  发布在  PHP
关注(0)|答案(2)|浏览(151)

我试图使用php在mysql上创建一个表。我发送一个包含列名和实际数据的数组。第一个位置是列名,其余的是实际数据。我设法创建了表和列。虽然我不能用数据填充表。这是我使用的PHP:

  1. <?php
  2. // Assuming your MySQL database connection details
  3. $DATABASE_HOST = "xxxx";
  4. $DATABASE_USER = "xxxx";
  5. $DATABASE_PASS = "xxxx";
  6. $DATABASE_NAME = "xxxx";
  7. $conn = mysqli_connect($DATABASE_HOST, $DATABASE_USER, $DATABASE_PASS, $DATABASE_NAME);
  8. if ($conn->connect_error) {
  9. die("Connection failed: " . $conn->connect_error);
  10. }
  11. $data = json_decode($_POST['data'], true);
  12. $columnName = array_shift($data); // Remove and return the first element
  13. $columnData = $data; // The rest of the array is the data to be inserted
  14. // Build the SQL query dynamically based on the number of data elements
  15. $placeholders = implode("', '", array_fill(0, count($columnData), "?"));
  16. $query = "CREATE TABLE IF NOT EXISTS tmp_transactions (rownumber INT AUTO_INCREMENT PRIMARY KEY);";
  17. $result = $conn->query($query);
  18. if ($result) {
  19. echo "Table created successfully";
  20. } else {
  21. echo "Error creating table: " . $conn->error;
  22. $queryDrop = "DROP TABLE tmp_transactions";
  23. $result = $conn->query($queryDrop);
  24. }
  25. $queryAlter = "ALTER TABLE tmp_transactions ADD COLUMN $columnName VARCHAR(255);";
  26. $result = $conn->query($queryAlter);
  27. $sqlInsert = "INSERT INTO tmp_transactions ($columnName) VALUES ($placeholders);";
  28. $stmtInsert = $conn->prepare($sqlInsert);
  29. $stmtInsert->bind_param(str_repeat('s', count($columnData)), ...$columnData);
  30. $resultInsert = $stmtInsert->execute();
  31. if ($resultInsert) {
  32. echo "Data inserted successfully";
  33. } else {
  34. echo "Error inserting data: " . $stmtInsert->error;
  35. }
  36. $stmtInsert->close();
  37. $conn->close();
  38. ?>

字符串
输入

  1. ["Amount","-43.85","200.00","4925.00","-210.00","-62.00","1638.00","25435.00","-12.50","-74.00"]
  2. or
  3. ["transactiondate","2023-12-22","2023-12-22","2023-12-22","2023-12-21","2023-12-21","2023-12-22","2023-12-22","2023-12-18","2023-12-18"]


尝试插入原始字符串而不是$placeholder没有成功。

92vpleto

92vpleto1#

您的代码将生成如下SQL:

  1. INSERT INTO tmp_transactions (some_column) VALUES (?, ?, ?, ?);

字符串
这是不起作用的,因为给定的列名和值的数量不匹配。要插入多行,你需要这样做:

  1. INSERT INTO tmp_transactions (some_column) VALUES (?), (?), (?), (?);


您也可以多次运行这样的单个语句,尽管这会导致比使用单个import语句更差的性能。

  1. INSERT INTO tmp_transactions (some_column) VALUES (?);

b09cbbtk

b09cbbtk2#

我修改了$placeholders,使其为RISK语句中的每个值提供单独的占位符,并根据数据元素的数量使用call_user_func_array添加了参数的动态绑定。这些更改应该有助于成功地将数据插入表中。

  1. // ...
  2. // Build the SQL query dynamically based on the number of data elements
  3. $placeholders = implode(", ", array_fill(0, count($columnData), "?"));
  4. // ...
  5. $queryAlter = "ALTER TABLE tmp_transactions ADD COLUMN $columnName VARCHAR(255);";
  6. $result = $conn->query($queryAlter);
  7. // ...
  8. $sqlInsert = "INSERT INTO tmp_transactions ($columnName) VALUES ($placeholders);";
  9. $stmtInsert = $conn->prepare($sqlInsert);
  10. // Dynamically bind parameters based on the number of data elements
  11. $bindParams = array(str_repeat('s', count($columnData)));
  12. foreach ($columnData as &$value) {
  13. $bindParams[] = &$value;
  14. }
  15. call_user_func_array(array($stmtInsert, 'bind_param'), $bindParams);
  16. // ...

字符串

展开查看全部

相关问题