PHP 准备语句 : binding variable parameters

标签 php database api mysqli prepared-statement

我的数据库中的 varchar 有问题,它只显示 0 而不是过去的书面文本。我有一个 URL,其中包含一些参数,例如昵称、积分或游戏难度。

localhost/api.php?nickname=test&points=5&difficulty=3

这些参数获取一个api(见下面的代码)并将它们写入数据库。

<?php
$nickname = $_GET['nickname'];
$points = $_GET['points'];
$difficulty = $_GET['difficulty'];

$mysqli = new mysqli("localhost", "games", "123", "tictactoe");

if ($mysqli->connect_errno) {
    die("Error");
}

/* Prepared statement, stage 1: prepare */
$sql ="insert into highscores (nickname, points, difficulty) values (?, ?, ?)";
if (!($stmt = $mysqli->prepare($sql))) {
    die("Error");
}

/* Prepared statement, stage 2: bind and execute */
if (!$stmt->bind_param("isi", $nickname, $points, $difficulty)) {
    die("Error");
}

if (!$stmt->execute()) {
    die("Error");
}
mysqli_close($mysqli);
?>

但我的问题是:如果 api 将参数绑定(bind)到类似于 "test" 的字符串,为什么数据库中的所有 varchar 都具有值 0

id  nickname  points  difficulty
1      0        5         3
2      0        5         3
3      0        5         3
4      0        5         3
5      0        5         3
6      0        5         3
7      0        5         3

数据库结构:

Column       Type         Null     Standard   Comments
id          int(11)       No         
nickname    varchar(20)   No             
points      int(11)       No         
difficulty  tinyint(4)    No         

我希望你能理解我的问题并能帮助我:)

最佳答案

您的绑定(bind)已反转。

$stmt->bind_param("isi", $nickname, $points, $difficulty)

表示 $nickname$difficulty 是整数。不过,您的数据库的 nicknamevarchar

应该是:

$stmt->bind_param("sii", $nickname, $points, $difficulty)

您可以看到它记录在案 here .

Character   Description
i           corresponding variable has type integer
d           corresponding variable has type double
s           corresponding variable has type string
b           corresponding variable is a blob and will be sent in packets

关于PHP 准备语句 : binding variable parameters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38315851/

相关文章:

mysql - 如何从两个不同的、不相关的表中获取最新行,并将它们合并到一个结果集中?

php - 实现将内容插入数据库的 secret 电子邮件功能

php - 我们如何让编码人员在编写自己的函数之前查找现有函数?

php - 使用 jquery 操作 JSON 数组

sql - SQL Server 中的可延迟约束

javascript - docker远程API设置IPAMconfig无法解码

java - Android 日历 API 与日历提供程序 API

facebook - 发布游戏成就 - 无效 token 错误 : 'An ID has already been specified'

php - 使用通配符删除文件 - exec vs unlink

php - 将mysql查询转换为数组格式