2015-10-26 83 views
-3

MySQL错误我怎样才能得到的错误从下面我的MySQL声明显示或是否有更好的方式来写下面的与PDO或相似:充分利用声明

代码:

$mysqlFiles = "SELECT campaign_image, optout_image FROM campaigns WHERE id = '$campaign_id'"; 

while($data = mysql_fetch_assoc($mysqlFiles)); 
{ 
    $imageNames[] = $data; 
} 
+2

http://php.net/manual/en/function.mysql-error.php?我不太在意这里。你是否故意造成错误? –

+0

您需要在提取数据之前执行查询。查看['mysql_query()'](http://php.net/manual/en/function.mysql-query.php)的例子。另外,是的,我强烈建议使用MySQLi或PDO。 – showdev

+0

你究竟想要什么。我不是很清楚。错误可能写入您的php.ini定义的地方 – Rik

回答

2

你的代码有一点点不正确。

  1. 对于初学者,您在字符串上使用mysql_fetch_assoc,而不是资源。
  2. 您的SQL易受SQL注入攻击。你应该使用prepared statements
  3. mysql_*函数已弃用。您应该使用mysqli_*函数。

一旦您纠正了这些问题,您可以使用mysqli_error查看错误消息。

+1

你得到了我的支持。你接受这个作为另一个答案吗? – RiggsFolly

1

首先...在这行代码:

while($data = mysql_fetch_assoc($mysqlFiles)); 
              ^end of statement, stops the process. 
  • 通知分号底有?

不管你信不信,被认为是有效的语法(而不会抛出,因为它的误差), ...也结束你的发言,将不会处理{ $imageNames[] = $data; }

查询是否成功,它仍然会在那里停止。

删除它

while($data = mysql_fetch_assoc($mysqlFiles)) 

参考上分号:

“如同在C或Perl,PHP要求指令是终止用ea结尾的分号ch声明。一段PHP代码的结束标记自动包含分号;你不需要用分号来终止PHP块的最后一行。块的结束标记将包括紧接着的换行符(如果存在的话)。“

如果你想捕捉到潜在的错误,使用mysql_error()针对您的查询

别的东西,我注意到的是,你不”查询“mysql_query()

所以你的代码将永远不会导致与什么已经说过沿着成功的查询。从手动

实施例:

$query = sprintf("SELECT firstname, lastname, address, age FROM friends 
    WHERE firstname='%s' AND lastname='%s'", 
    mysql_real_escape_string($firstname), 
    mysql_real_escape_string($lastname)); 

// Perform Query 
$result = mysql_query($query); 

实施例从http://php.net/manual/en/function.mysql-fetch-assoc.php

while ($row = mysql_fetch_assoc($result)) { 
    echo $row["userid"]; 
    echo $row["fullname"]; 
    echo $row["userstatus"]; 
} 

如果下面分别编码为这样并且在用分号,就不会处理内部{...}任何东西:

while ($row = mysql_fetch_assoc($result)); { 
            // ^semi-colon terminator similar to yours 
    echo $row["userid"]; 
    echo $row["fullname"]; 
    echo $row["userstatus"]; 
} 
+0

我希望这会为某人服务。我想我解释得很好,除非我没有把握这个问题。 –