在php中与mysql通信的问题

时间:2015-06-09 09:06:44

标签: php mysql sql database

我正在学习php和mysql,我正在努力使我当前的网站变得充满活力。

我查看了一些指南,并根据自己的代码进行了工作,据我所知,我相信它应该可以工作,但是当我在网上检查时,它什么也没做。

我在下面的代码中是否有任何明显的遗漏,无论如何在php中显示错误会帮助我发现我做错了什么?

<?
  function functions($method, $query) {
    $con = mysql_connect("hostname","username","password");

    mysql_select_db("databasename", $con) or die(mysql_error());


    if($method = 'get') {
      $result = mysql_query($query);
      return $result;
      echo $result;
    }

    if($method = 'send') {
      $result = mysql_query($query);
    }
  }

  $query = "SELECT * FROM 'content' where 'ID' = 1";

  $heading = functions('get', $query);

?>

<h1><?php echo $heading;?></h1>

5 个答案:

答案 0 :(得分:1)

首先启用错误报告。在你的php标签中添加这一行作为第一行。

describe("imgeRs", function () {

    var getprotocol = require("../getProtocol");
    var S3rs = require("../S3resizer");
    var objCr = require("../objectCreator");
    var mkDir = require("../makeDir");
    var fileResizer = require("../fileResizer");

    describe("Calling S3", function () {
        describe("Success call", function () {

            var testedModule, eventObj, contextDoneSpy, S3resizerStub, objCreatorStub, getProtocolStub, fakeResults, mkDirStub, fileResizerStub;

            before(function (done) {
                contextDoneSpy = sinon.spy();

                S3resizerStub = sinon.stub(S3rs, "rs");

                objCreatorStub = sinon.stub(objCr, 'creator');

                getProtocolStub = sinon.stub(getprotocol, "getProtocol");

                mkDirStub = sinon.stub(mkDir, "handler");

                fileResizerStub = sinon.stub(fileResizer, "rs");

                eventObj = {"path": "s3://theBucket/image.jpeg"};

                fakeResults = ["resized"];

                testedModule = proxyquire("../index", {
                    './getProtocol': {
                        'getProtocol': getProtocolStub
                    },
                    './S3resizer': {
                        'rs': S3resizerStub
                    },
                    './objectCreator': {
                        'creator': objCreatorStub
                    },
                    './makeDir': {
                        'handler': mkDirStub
                    },
                    './fileResizer': {
                        'rs': fileResizerStub
                    }
                });

                S3resizerStub.callsArgWith(5, null, fakeResults);

                testedModule.imageRs(eventObj, {done: function (error) {
                    contextDoneSpy.apply(null, arguments);
                    done();
                }});
            });

            after(function () {
                S3rs.rs.restore();
                objCr.creator.restore();
                getprotocol.getProtocol.restore();
                mkDir.handler.restore();
                fileResizer.rs.restore();
            });

            it("calls context.done with no error", function () {
                expect(contextDoneSpy).has.been.called;
            });
        });
    });
});

然后避免使用短标签。使用error_reporting(E_ALL); 标记。有时你的php配置可能没有启用短标签。

检查查询是否返回了任何内容。无论是成功还是失败。

和比较运算符是==或===。您已在函数内使用了assign运算符(=)。你需要解决这个问题,否则什么都不会回来。

当你<?php ?>时它只返回资源(如果成功,则返回false)。您必须使用echo mysql_query();或在回显之前从查询中获取数据。

最后,请避免使用mysql_fetch_array()扩展名。它们已被弃用。请改用mysql_*MySQLi

答案 1 :(得分:1)

  

我在下面的代码中遗漏了哪些明显的内容

你应该小心使用=和==因为它们意味着不同的东西。在上面的示例中,您编写了以下内容:

if($method = 'get') {
  $result = mysql_query($query);
  return $result;
  echo $result;
}

这实际上是检查赋值($ method ='get')是否成功。我想你要做的是检查$ method是否等于'get'你会这样做:

if($method == 'get') {
  $result = mysql_query($query);
  return $result;
  echo $result;
}

另一件值得注意的事情是,你已经命名了函数'函数',这可能有点令人困惑。我建议您尝试将函数命名为更具描述性的函数,以便将来可以更轻松地找到它并随着代码的增长而发现。

正如其他人所评论的,你现在应该使用MySQLI,所以这里也是一个链接。它并不像看起来那么令人生畏,但现在学得更好。 PHP Mysqli

  

无论如何都要在php中显示错误,这有助于我发现我做错了什么?

经常查看您所获得的错误是了解您所遇问题的唯一方法。这是一个很好的Stack Overflow问题,关于错误和您可能遇到的挫折,没有错误显示:How to get useful error messages in PHP?

答案 2 :(得分:0)

我不确定你在问什么,但如果你想知道如何连接到当前的MySQL数据库,请从这开始。

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
 } 

$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
    }
} else {
    echo "0 results";
}
 $conn->close();
 ?> 

答案 3 :(得分:0)

问题是您的查询,是的,您可以收到错误消息,但您需要使用错误检查。您没有检查查询是否成功。尝试这样的事情:

select *,(select top 1 a.amount from yourtable a where a.id = YourTable.id and a.code = 101) as [your update value]
from YourTable

这将使您的查询出错,因为您在表和列周围使用了引号。 MySQL不使用引号(if ( ! $result = mysql_query($query)) { // NB: die should never be used on a live website, use only whilst building the website die('ERROR['.mysql_errno().']: '.mysql_error()); } ),但勾选'。这是一个微妙但重要的区别,它们是可选的。这样可以正常工作:

`

答案 4 :(得分:0)

您使用错误的比较... =必须== $method = 'get'$method = 'send'

if($method == 'get') {
  $result = mysql_query($query);
  return $result;
  echo $result;
}

if($method == 'send') {
  $result = mysql_query($query);
}

您还使用PHP短标记<?。因此,请检查服务器上的php.ini(如果未禁用)。您应该使用<?php

正如其他人提到的那样,你不应该使用mysql_*,不推荐使用它。而不是使用MySQLiPDO

如果你想在PHP中看到错误,只需在开头的某个地方将这一行添加到你的代码中:

error_reporting(E_ALL ^ E_NOTICE);

它会向您显示代码中的所有错误,除了您不需要的通知消息。如果您还想查看此通知消息,请将其更改为:

error_reporting(E_ALL);