4

假设我在InnoDB数据库中有两个表:categoriesjokes; 并且我正在使用PHP/MySQLi来完成这项工作。表格如下所示:

CATEGORIES
id (int, primary, auto_inc)  |  category_name (varchar[64])
============================================================
1                               knock, knock

JOKES
id (int, primary, auto_inc)  |  category_id (int)  | joke_text (varchar[255])
=============================================================================
empty

感谢之前的回答,我发现您可以执行以下操作来添加一个新笑话,其中包括:$joke_text, $category_id

INSERT INTO jokes (category_id, joke_text)
SELECT c.id, '$joke_text'
FROM categories AS c WHERE c.id = $category_id;

这使我能够在不使用外键的情况下确保该$category_id值指的是现有类别(请忽略外键问题,因为我的问题旨在帮助我学习“复杂”的准备好的语句)。

所以效果很好。但是,我现在正在尝试学习准备好的陈述,并且在花了一整天的时间之后,我终于掌握了基础知识。不幸的是,我完全不知道如何在mysqli下使用准备好的语句执行上述 SQL 查询,并且我无法在网上找到有关此类问题的任何信息。

如果有人可以帮助我,我将不胜感激。

4

2 回答 2

2

首先,您创建的声明非常像您所做的正常声明

$stmt = $mysqli->prepare("INSERT INTO jokes (category_id, joke_text)
SELECT c.id, ?
FROM categories AS c WHERE c.id = ?;");

获取绑定到参数's'的语句代表字符串数据,i代表整数

$stmt->bind_param('si', $joke_text,$category_id);   // bind to the parameters

/* 执行准备好的语句 */

$stmt->execute();
于 2013-08-23T02:44:41.527 回答
0

我实际上是在写一些代码,但我意识到你也在网上搜索这个。因此,我为您提供了 PHP 网站的链接,您可以在其中看到其中的许多内容。

准备好的报表

mysqli 一般

既然你正在学习 MySQLi,为什么不直接转向 PDO。它非常相似,但我认为这就是未来的发展方向。

http://php.net/manual/en/book.pdo.php

http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

于 2013-08-23T02:45:51.520 回答