【问题标题】:How to get variables from URL and insert into database如何从 URL 获取变量并插入数据库
【发布时间】:2017-06-27 01:04:14
【问题描述】:

所以我试图从 URL (http://example.com/pb.php?id=123&affiliate=abd123&lp1=dun.com&lp2=dun2.com&lp3=dun3.com) 获取变量,我尝试了这段代码,但我收到了这个错误

准备失败:(1136) 列计数与第 1 行的值计数不匹配 致命错误:在第 25 行的 /home/recondes/public_html/postback.php 中的布尔值上调用成员函数 bind_param()

还有

<?php

define("MYSQL_HOST", "localhost");
define("MYSQL_PORT", "3306");
define("MYSQL_DB", "db");
define("MYSQL_TABLE", "tbl");
define("MYSQL_USER", "user");
define("MYSQL_PASS", "pass");
$mysqli = new mysqli(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DB);
if ($mysqli->connect_errno) 
{
  echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
$id = $_GET['id'];
$affiliate =            $_GET['affiliate'];
$lp1 =           $_GET['lp1'];
$lp2 =           $_GET['lp2'];
$lp3 =           $_GET['lp3'];


if (!($stmt = $mysqli->prepare("INSERT INTO ".MYSQL_TABLE." VALUES (id, affiliate, lp1, lp2, lp3);"))) 
{
  echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
$stmt->bind_param('dds', $id, $affiliate, $lp1, $lp2, $lp3 );
if (!$stmt->execute()) 
{
  echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
}
else
{
  printf("%d Row updated, added ".$id." to ".$affiliate." .\n", mysqli_stmt_affected_rows($stmt));
}
?>

【问题讨论】:

  • “列数与值数不匹配”非常明显,您传递的值比表列数多或少。

标签: php mysql mysqli


【解决方案1】:

您的查询没有列出要插入的列,因此它希望您为所有表列提供值。您尚未显示表架构,但它不仅有 5 列。

您还缺少将由bind_param() 填充的占位符。我怀疑您在VALUES() 中列出的值是表列。所以试试:

if (!($stmt = $mysqli->prepare("INSERT INTO ".MYSQL_TABLE." (id, affiliate, lp1, lp2, lp3) VALUES (?, ?, ?, ?, ?)"))) 

另外,在您对bind_param 的调用中,指定数据类型的字符串需要包含与参数一样多的字母。所以应该是:

$stmt->bind_param('dssss', $id, $affiliate, $lp1, $lp2, $lp3 );

最后,当您在某个步骤中遇到错误并打印错误消息时,您应该停止此脚本,而不是继续执行下一步。如果prepare() 失败,使用prepared statement 是没有意义的。

【讨论】:

  • 等待附属变量没有输入字母?它只记录数字为什么会这样?
猜你喜欢
  • 1970-01-01
  • 2018-02-19
  • 1970-01-01
  • 2016-04-10
  • 2017-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多