2016-08-16 194 views
1

我有我試圖用它來更新它具有以下佈局的MySQL表的應用:問題更新表

Table Layout

我想,這樣的應用程序中的URL發送到得到它員工姓名和輸入/輸出列值,然後我的PHP腳本查找具有匹配名稱的人並更改輸入/輸出列值。下面是一個條目的一個例子:當所述輸入/輸出欄應改變到1

Table Entry

出於某種原因,我的腳本是如下它保持爲0

<?php 
// Input the credentials, clocktablet would be the database name 
$con=mysqli_connect("localhost","tablet1","*****","clocktablet"); 
// Check connection 
if (mysqli_connect_errno()) { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 

// escape variables for security 
$employeename = mysqli_real_escape_string($con, $_GET['employeename']); 
$Clock = mysqli_real_escape_string($con, $_GET['Clock']); 

//alters Track Table to display in/out status 
$sql = "UPDATE track SET In/Out=$Clock WHERE EmployeeName=$employeename"; 

if (!mysqli_query($con,$sql)) { 
    die('Error: ' . mysqli_error($con)); 
} 

mysqli_close($con); 
?> 

任何人都可以看到任何錯誤的PHP腳本?

表名是Track,數據庫名稱是clocktablet,我可以確認輸入腳本的用戶名和密碼是否正確。在創建

+0

缺少引號中列名。更好地使用準備聲明! – Saty

+1

將'in/out'換成'/'可能會導致問題 – SuperDJ

+0

@alex它是位域嗎? –

回答

3

在列中的值丟失引號和反引號列手冊名字爲exm In/Out

更好地使用準備聲明!

//alters Track Table to display in/out status 
    $smt = $con->prepare("UPDATE `track` SET `In/Out`=? WHERE `EmployeeName`=?"); 
    $smt->bind_param('is',$_GET['Clock'],$_GET['employeename']); 
    $smt->execute(); 

要通過更新查詢檢查受影響的行數使用

printf("Affected rows (UPDATE): %d\n", $con->affected_rows); 
1

各地使用$employeenamebacktick單引號中列名的In/Out

$sql = "UPDATE track SET `In/Out`= $Clock WHERE EmployeeName= '$employeename'"; 
+0

我認爲$ employeename只是例如:) –

+0

是的,但無論他的名字將是字符串和字符串必須有引號 – user1234

+0

真的它應該是一個[準備好的聲明和參數化語句](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) – RiggsFolly

1

變化

$sql = "UPDATE track SET In/Out=$Clock WHERE EmployeeName=$employeename"; 

$sql = "UPDATE track SET `In/Out`=$Clock WHERE EmployeeName='$employeename'"; 

         ^enclose column name with backtick 

可能與反斜線列名被允許表。但是,插入該列的值時。它需要與backtick包圍,否則將通過錯誤說明

1064 - 你在你的SQL語法錯誤;檢查 對應於你的MySQL服務器版本正確的語法使用 近「/縮小

BACKTICK

enter image description here

0

使用反引號的列名和單引號的文本值。

$sql = "UPDATE track SET `In/Out`= $Clock WHERE EmployeeName= '$employeename'"; 

如果其位字段,則:在列值和反引號

$sql = "UPDATE track SET `In/Out`= b'".$Clock."' WHERE EmployeeName= '$employeename'"; 
+0

反向列名稱,而不是單引號,就像您在示例中使用的那樣 – RiggsFolly