Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php连接到mysql_Php_Mysql - Fatal编程技术网

使用php连接到mysql

使用php连接到mysql,php,mysql,Php,Mysql,以下是我从OReilly的“学习PHP MYSQL和Javascript”中获得的教程代码 <?php //require_once = 'login.php'; $db_database = 'publications'; $db_hostname = 'localhost:8888'; $db_username = 'root'; $db_password = 'root'; $db_server = mysql_connect($db_hostname, $db_userna

以下是我从OReilly的“学习PHP MYSQL和Javascript”中获得的教程代码

<?php 
//require_once = 'login.php';

$db_database = 'publications';
$db_hostname = 'localhost:8888';
$db_username = 'root';
$db_password = 'root';


$db_server = mysql_connect($db_hostname, $db_username, $db_password);
if(!$db_server) die("Unable to connect to MYSQL: ". mysql_error());

mysql_select_db($db_database)
    or die("Unable to connect to database: " . mysql_error());

$query = "SELECT * FROM classics";
$result = $mysql_query($query);

if(!$result) die ("Could not query: " . mysql_error());
$rows = mysql_num_rows($result);

for($j = 0; $j < $rows; ++$j)
{
    echo 'Author: ' . mysql_result($result, $j, 'author') . '</br>';
    echo 'Title: ' . mysql_result($result, $j, 'title'). '</br>';
    echo 'ISBN: '.mysql_result($result, $j, 'isbn').'</br>';
}

?>

但是,我在尝试连接时出错。浏览器说这是一个500错误(这真的没有什么帮助)。当我取出行
$db_username='root'$db_password='root'我收到另一个错误:“无法连接到数据库:拒绝用户“”@'localhost'访问数据库‘发布’”

有人能帮忙诊断这个问题吗

谢谢

改变这个

$result = $mysql_query($query);
对此

$result = mysql_query($query);
函数名是
mysql\u query
而不是
$mysql\u query
$
用于变量名

另外,您可以使用PHP命令行,而不是在浏览器窗口中立即“查看”代码。如果文件名为
foo.php
,则可以执行以下操作:

>> php foo.php
PHP Notice:  Undefined variable: mysql_query in /var/www/foo.php on line 17
PHP Fatal error:  Function name must be a string in /var/www/foo.php on line 17

如您所见,错误消息非常清楚。由于使用了
$mysql\u query
,它认为
mysql\u query
是一个变量,但没有在某个地方定义这样的变量。

您是否尝试通过在代码中设置的连接信息手动连接到数据库

首先使用phpmysql连接到数据库,更改phpmysql配置文件以匹配mysql服务器身份验证信息,然后在进一步编码之前确保所有内容都正确。

请编写此内容

mysql_select_db($db_database, $db_server)
$result = mysql_query($query);
而不是

mysql_select_db($db_database)
$result = $mysql_query($query);
写下这个

mysql_select_db($db_database, $db_server)
$result = mysql_query($query);
而不是

mysql_select_db($db_database)
$result = $mysql_query($query);
还有一件事请检查您的主机名:
$db_hostname='localhost:8888'

一般来说,它是
$db_hostname='localhost:8080'


因此,请再次确认

$
符号应仅用于变量,而不用于函数

$var=5;// variable declaration
如果要声明函数语法,则不应使用$
例:


在此
函数中,var
是变量,
mysql\u query($query)
是函数。

停止使用! 您应该不要使用此功能或其他与扩展相关的功能

它在PHP7.0.0及更高版本中被折旧和删除。 另一种选择是使用或。 下面是使用PDO连接到MySQL的示例脚本:

<?php

  /* Connect to a MySQL database using driver invocation */

  /* DSN options:
     http://php.net/manual/en/ref.pdo-mysql.connection.php

     Error handling options:
     http://php.net/manual/en/pdo.error-handling.php

     Learn how to secure against SQL injection attacks:
     http://php.net/manual/en/pdo.prepared-statements.php
  */

  $user = 'myusername';
  $pass = 'mypassword';
  $host = 'localhost';
  $mydb = 'mydatabase';

  $dsn = "mysql:dbname=$mydb;host=$host"; 

  try {
      $dbh = new PDO($dsn, $user, $pass);
  } catch (PDOException $e) {
      echo 'Connection failed: ' . $e->getMessage();
  }

?>

您可以按如下方式执行:

<?php
    $conn = mysqli_connect("localhost","root","");
    if (!$conn)
    {
        die("Connection failed:".mysqli_connect_error());
    }
    $db = mysqli_select_db($conn,"Database_name");
    if(!$db)
    {
        echo "Connection failed";
    }
?>


root真的是您的root密码吗?或者您只是为了方便起见才把它放在那里?我还应该添加-您是否成功连接到该数据库?您是否将用户名、密码设置为root?如果出现致命错误(500),请提高php.ini中的错误级别和/或查看Web服务器
error.log
。即使大多数初学者教程都告诉您,显示mysql\u错误实际上是个坏主意()因为它可以向攻击者提供他们可以利用的数据库信息。我通常会在我的应用程序中构建某种开发人员模式。类似于在我的数据库顶部设置一个
dev_mode=false
,然后在(!$result)死亡(“数据库错误”)之前测试
dev_mode
更好的方法是,将开发模式存储在
会话
对象中,并仅通过受密码保护的页面进行设置。这个问题似乎与主题无关,因为它涉及的是一个打字错误。这不会给其他答案增加太多内容。