准备好的语句和数据库

Posted

技术标签:

【中文标题】准备好的语句和数据库【英文标题】:prepared statements and databases 【发布时间】:2019-06-17 22:00:52 【问题描述】:

数据没有进入数据库。我可以创建表格,但不能从表格中插入数据。我看到的都是零。

我的最后一个问题,有人建议我使用准备好的语句。所以,我模仿了手册。我已经尽我所能简化了代码。其他问题建议在绑定语句之前定义变量,我尝试移动变量。 (注意:$user 变量来自一个必需的文件)

/* Non-prepared statement */
if (!$mysqli->query("DROP TABLE IF EXISTS profiles") || !$mysqli->query("CREATE TABLE profiles
    (user VARCHAR(16), text VARCHAR(355))")) 
    echo "Table creation failed: (" . $mysqli->errno . ") " . $mysqli->error;


$text = sanitizeString($_POST['text']);
$text = preg_replace('/\s\s+/', ' ', $text);


/* Prepared statement, stage 1: prepare */
if (!($stmt = $mysqli->prepare("INSERT INTO profiles
    (user, text) VALUES (?,?)"))) 
    echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;


/* Prepared statement, stage 2: bind and execute */

if (!$stmt->bind_param("ii", $user, $text)) 
    echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error;


if (!$stmt->execute()) 
    echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;


/* explicit close recommended */
$stmt->close();

我希望创建数据库列。但是,从浏览器输入表单的用户数据不会记录。相反,我每次尝试都会看到一行零。

【问题讨论】:

尽量减少php参数。 【参考方案1】:

您将整数传递到您的表格中

if (!$stmt->bind_param("ii", $user, $text)) 
                        ^^

i 是整数,s 是字符串。

if (!$stmt->bind_param("ss", $user, $text)) 

【讨论】:

以上是关于准备好的语句和数据库的主要内容,如果未能解决你的问题,请参考以下文章

从准备好的语句中获取数据

Golang使用准备好的SQL语句

我啥时候应该使用准备好的语句?

无法使用准备好的语句从数据库中提取密码哈希

使用 PHP 和 MSSQL 准备好的语句

带有位域的 PDO 准备好的语句