【问题标题】:Why can't i write my MySQL database using a 'required' function?为什么我不能使用“必需”函数编写我的 MySQL 数据库?
【发布时间】:2012-07-20 19:24:50
【问题描述】:

我正在使用一个名为“lib.php”的文件,我在其中定义了许多函数。 这些功能之一如下:

function dbconn()
{
$servername="127.0.0.1";
$username="root";
$conn=mysql_connect($servername,$username)or die(mysql_error());
mysql_select_db("profit",$conn) or die(mysql_error());
}

在我网站的所有.php 页面中,我一直在使用这个dbconn() 函数,它似乎可以很好地从数据库中读取信息。但是,在尝试写入信息时,似乎会出现问题。具体来说,以下代码不起作用:

<?php
require ("lib.php");
set_time_limit(60);
session_start();
dbconn();
$sql="update `city` set end_dt=now() where city_id='$_POST[killcity]'";
$result=mysql_query($sql,$conn) or die(mysql_error());
header("Location: manipulate.php");
?>

它说conn是一个未定义的变量,而它应该由lib.php中的dbconn()定义。

所以,我找到了解决这个问题的方法,而是创建一个名为 dbconn.php 的新 php 文件,其中包含与 dbconn() 完全相同的内容,并插入 require ("dbconn.php"); 而不是 dbconn();

但我仍然想知道:为什么原来的方式不起作用?

【问题讨论】:

  • 这是variable scope的问题。
  • @AlvinWong 这应该是一个答案。
  • 请阅读SQL injection,因为您似乎习惯于编写易受攻击的代码。

标签: php mysql function connect require


【解决方案1】:

你可以为函数添加一个返回语句,通过你可以在函数中使用全局变量,这不是一个好习惯。如果您愿意,请参阅how global variable works

function dbconn() {
    $servername="127.0.0.1";
    $username="root";
    $conn=mysql_connect($servername,$username)or die(mysql_error());
    mysql_select_db("profit",$conn) or die(mysql_error());
    return $conn;
}

$conn = dbconn();

【讨论】:

  • 我现在明白全局变量的问题了,感谢您的帮助。我真的不明白你的修复是如何工作的,但它确实可以:尝试过,并修复了 :) 谢谢!
猜你喜欢
  • 2012-12-19
  • 2015-02-18
  • 1970-01-01
  • 2012-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-12
  • 2011-01-14
相关资源
最近更新 更多