【发布时间】:2014-05-27 03:02:08
【问题描述】:
我正在尝试检查我的表中是否已经存在记录,如果不存在,我想执行插入...使用准备好的语句。谁能告诉我下面有什么问题?我已经编写了带有错误检查的代码,它基本上说查询是便便:) 当涉及到 SQL 和几乎任何与编程相关的东西时,我都很糟糕,所以我真的很感激在这个看起来很狡猾的任务中分享的任何智慧......谢谢!
$mysqli = mysqli_connect($config['host'], $config['user'], $config['pass'], $config['db']);
$timestamp = time();
$stmt = $mysqli->prepare("IF NOT EXISTS (SELECT id FROM course_licence_cart WHERE userid = ? AND courseid = ? AND lmsid = ?) BEGIN INSERT INTO course_licence_cart (lmsid, userid, courseid, assigned_by, assigned_on) VALUES (?, ?, ?, ?, ?) END");
foreach($_POST['assignTo'] as $assignTo){
$stmt->bind_param('iiiiiiii', $assignTo, $_POST['course'], $core['id'], $core['id'], $assignTo, $_POST['course'], $userInfo['id'], $timestamp);
$stmt->execute();
}
仅供参考:这是在提交表单后发生的,我检查了所有变量,它们都很好,并且过程本身运行良好(我没有IF NOT EXISTS),它只是这个新的查询类型与准备好的语句混合在一起,完全让我失望。
-- 更新--
我直接跑了以下:
IF NOT EXISTS (SELECT `id` FROM `course_licence_cart` WHERE `userid` = '175' AND `courseid` = '1' AND `lmsid` = '1') BEGIN INSERT INTO `course_licence_cart` (`lmsid`, `userid`, `courseid`, `assigned_by`) VALUES ('1', '175', '1', '175') END
我得到错误:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF NOT EXISTS (SELECT `id` FROM `course_licence_cart` WHERE `userid` = '175' AND' at line 1
【问题讨论】:
-
你有没有直接尝试过这种说法?
-
甚至有一个 PHP 示例作为答案之一,这个问题没有被标记
-
对于 SQL 来说,没有像 'IF NOT EXISTS (...' 这样的测试。请参阅 'google'。无论如何,这对“数据集”没有任何意义。你知道你检查了一行。遗憾的是,数据库引擎没有。阅读您的问题 - there are NO NEW QUERY TYPES 使用'prepared queries'!这是完全相同的查询 只是一种不同的更安全的称呼方式!
标签: php sql mysqli prepared-statement exists