mysqli,预处理语句和INSERT-SELECT

时间:2013-08-23 02:20:05

标签: php mysql mysqli prepared-statement

让我假装我在 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

感谢此处的previous答案,我发现您可以执行以下操作,以便添加由$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查询,而且我无法在线找到有关此类问题的任何信息。

如果有人能帮助我,我会非常感激。

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

我实际上是在写一些代码,但我意识到你也在网上搜索这个代码。所以我得到了PHP网站的链接,你可以看到很多这些链接。

Prepared statements

mysqli in general

由于您正在学习MySQLi,为什么不转而使用PDO。它非常相似,但我认为这是未来的发展方向。

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

http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers