繁体   English   中英

mysqli,准备好的语句和INSERT-SELECTs

[英]mysqli, prepared statements, and INSERT-SELECTs

假设我在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查询,并且我无法在线找到有关此问题的任何信息。

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

首先,您非常像创建普通语句那样创建语句

$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();

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

准备好的陈述

mysqli一般

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

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

http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM