[英]mysqli, prepared statements, and INSERT-SELECTs
假设我在InnoDB数据库中有两个表: categories
和jokes
; 并且我正在使用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,为什么不直接使用PDO。 这非常相似,但我认为这是未来的方向。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.