MySQL中$$的作用是什么?旧登录代码$$link使用场景解析
嘿,我来帮你拆解一下你遇到的两个问题——PHP里的$$link可变变量,还有MySQL中$$的作用,结合你说的旧代码场景来解释:
PHP中的可变变量(
$$link) 首先,你提到的$$link是PHP里的可变变量,简单说就是让变量的名字能动态变化。举个实际的例子:
$link = 'db_conn'; $$link = mysqli_connect('localhost', 'user', 'pass'); // 这行代码等价于直接写 $db_conn = mysqli_connect(...);
原开发者先定义$link,又声明全局$$link,大概率是想动态引用某个全局的数据库连接变量。比如如果$link的值是'mysql_link',那$$link就指向全局的$mysql_link——可能当时是为了灵活切换不同的数据库连接,但这种写法可读性极差,很容易绕晕,尤其是新手调试的时候,这也是现代PHP代码几乎不推荐用可变变量的原因。
如果你要重构这个旧登录流程,建议把这种模糊的可变变量替换成明确的变量名,或者用类来封装数据库连接,后续维护会轻松很多。
MySQL中的
$$作用 MySQL里的$$和PHP的可变变量完全是两码事,它最常见的用途是临时替换语句分隔符:
默认MySQL的语句结束分隔符是;,但当你写存储过程、触发器或者自定义函数时,内部会用到;来分隔逻辑语句,这时候如果还用;当分隔符,MySQL会误以为整个存储过程写到第一个;就结束了,导致语法错误。所以我们会临时把分隔符改成$$,示例如下:
-- 先把分隔符改成$$ DELIMITER $$ CREATE PROCEDURE get_login_user(IN user_id INT) BEGIN SELECT username, email FROM users WHERE id = user_id; -- 这里的;不会触发执行 END $$ -- 改回默认的;分隔符 DELIMITER ;
除此之外,在部分MySQL客户端工具里,$$可能还有其他小用途,但核心场景就是作为临时分隔符来处理多语句的数据库对象定义。
内容的提问来源于stack exchange,提问作者Jordan
相关产品推荐
相关产品推荐

