2013-07-05 3 views
-1
<?php 
$hostname='localhost'; 
$user='root'; 
$password=''; 
$connect=mysqli_connect($hostname,$user,$password,'a_railway'); 

if(!$connect) 
{ 
    die('Could not connect'); 
    } 

$rs="central"; 
$rd="central"; 
$s="A"; 
$d="B"; 

$dist=call_dist($rs,$rd,$s,$d,$connect); 
echo $dist; 

function call_dist($rs,$rd,$s,$d,$connect) 
{ 
    $src_dist="SELECT Distance FROM $rs WHERE Station=$s "; 
    $dest_dist="SELECT Distance FROM $rs WHERE Station=$d "; 
    $src_dist=mysqli_query($connect,$src_dist); 
    $dest_dist=mysqli_query($connect,$dest_dist); 
    $dist=abs($src_dist-$dest_dist); 
    return $dist; 
} 
?> 

내 Sql 쿼리가 작동하지 않는 이유는 무엇입니까? 데이터베이스에는 문제가 없습니다. 그러나 쿼리는 실행되지 않습니다. 이 프로그램에서 점 A와 B의 값을 뺀 값을 찾아야합니다.MySQL 선택 쿼리가 작동하지 않습니다.

+1

를 "작동하지 않는" ? 무슨 일이야? 'if ($ src_dist === FALSE) {die (mysqli_error());를 확인해보십시오. }'. 또한 [mysqli_query'] (http://php.net/manual/en/mysqli.query.php)가 자원을 반환한다는 것을 기억하십시오. [mysqli_fetch_assoc'] (http://www.php.net/manual/en/mysqli-result.fetch-assoc.php)를 사용하여 데이터를 가져와야한다. –

+0

mysqli_query가 반환하는 것을 확인 했습니까? 그것은 결과 집합을 제공하고, 당신이하려고하는 방식으로 결과 집합에 대해 수학을 수행 할 수 없습니다. – andrewsi

+0

yup @andrewsi. 에러가 발생했습니다. Notice : 클래스 mysqli_result의 객체를 30 행의 C : \ xampp \ htdocs \ check \ test.php에 int로 변환 할 수 없습니다. 어떻게 int로 변환 할 수 있습니까? –

답변

3

station이 varchar 인 경우 문자열 주변에 따옴표가 필요합니다.

$src_dist="SELECT Distance FROM $rs WHERE Station='$s' "; 

그러나, 당신은 하지 이제까지 그 같은 문자열 값을 보간한다. 준비된 진술을 사용하십시오!

이 참조를 읽고, 귀하의 코드를 훨씬 쉽게 인생을 만들 것입니다 : http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

편집 당신은 SQL에서 수학 할 수도 있습니다 : 무슨 뜻 이죠

$dist_query = mysqli_query("SELECT ABS(s.Distance - d.Distance) as dist FROM 
       (SELECT Distance FROM $rs WHERE Station='$s') as s, 
       (SELECT Distance FROM $rs WHERE Station='$d') as d"); 
$dist_result = $dist_query->fetch_assoc(); 
return $dist_result[0]['dist']; 
+0

넵 나는 그것이 SQL injection에 취약하다는 것을 알고 있습니다. 난 그냥 PHP에서 초보자 그래서 나는 확실히 yhat 다음번에 노력할 것입니다. –

+0

아마도 더 쉬운 방법으로 업데이트했습니다. –

+0

그게 쉬운 접근 방식입니다. 그러나 나는 "as"와 "as d"가하는 것을 얻지 못했습니다. –

관련 문제